课程设计项目成绩评定表
设计项目成绩评定表
一、设计任务及要求: 1、设计任务: 设计一个电源定时插座设计。 2、要 求: 利用单片机设计一智能插座,可以人为设定插座使用时间。如按键按一次代表允许接通一小时。 指导教师签名: 年 月 日 二、指导教师评语: 该生在本次课程设计过程中,态度认真,通过多次调试,细心改正实训过程中发现的问题,最终实现实验要求的内容 指导教师签名: 年 月 日 三、成绩评定: 指导教师签名: 年 月 日 四、系部意见: 系部盖章: 年 月 日 电子与信息工程系 2012年6月
频率计设计目录
目录
一、设计目的 ······································································· 错误!未定义书签。 二、设计思路 ······································································· 错误!未定义书签。 三、设计过程 ······································································· 错误!未定义书签。
3.1 系统原理框图 ····································································· 错误!未定义书签。
3.2 模块电路设计 ··································································· 错误!未定义书签。
四、系统调试与结果 ··························································· 错误!未定义书签。
4.1焊接电路注意问题 ······························································· 错误!未定义书签。 4.2电路板调试 ·········································································· 错误!未定义书签。 4.3调试记录 ·············································································· 错误!未定义书签。 4.4使用说明 ·············································································· 错误!未定义书签。
五、主要元器件与设备 ······················································· 错误!未定义书签。 六、课程设计体会 ······························································· 错误!未定义书签。 七、参考文献 ······································································· 错误!未定义书签。
电子与信息工程系 2012年6月
频率计设计
一、设计目的
1、熟悉整个项目的流程即单片机系统设计过程。 3、熟练的使用汇编语言编写小的应用程序。 4、掌握系统的调试与安装。
5、提高学生的自学能力和手动能力。
二、设计思路
1、设计并制作单片机控制电路。 2、设计并制作输出控制电路
三、设计过程
3.1 系统原理框图
图1系统结构框图
1 电子与信息工程系 2012年6月
频率计设计
3.2 模块电路设计
电源部分
图2电源结构图
单片机部分
图3单片机结构图
开关控制部分
2 电子与信息工程系 2012年6月
频率计设计
图4开关控制结构图
四、系统调试与结果
4.1焊接电路注意问题
电容的正负极不要焊接错误,否则会引起电容爆炸。芯片的正确插拔。
4.2电路板调试
首先,检查线路是否存在断路、短路情况,可以用数字万用表的短路检测功能来检查线路。如果听到蜂鸣声,线路就是通的。
然后,检查芯片插槽引脚是否有连接错误的情况。
最后,在确定电路连接无误的前提下,插上芯片,接通电源,查看数码管上是否存在乱码的情况。时间显示是否是真实的时间。
4.3调试记录
对于PCB电路板,焊接元器件比较简单,一般不容易出错。万一出现错误,绝大多数情况下是由于焊接不牢,出现虚焊现象。对于数码管出现乱码的现象一般是由于制PCB板时,腐蚀不完全,该断开的地方没有断开。本次实验调试一
3 电子与信息工程系 2012年6月
频率计设计
次成功。
4.4使用说明
1、面板上有5个按键,从左到右次编号为1、2、3、4、5。
有5个数码管,4个连在一起记为数码管1用来显示时间的时和分,另一个数码管记为数码管2用来显示工作状态。2个发光二极管,用来判断功能是否达到设计。
1键复位,2键定时功能开关,3键累加1,4键移位,5键选择工作的状态。 2、显示正常时间,数码管2显示0
需要校正时间时,按一下5键,此时数码管2显示1,时的高位在闪烁,按3 键,时的高位累加一。按4键,时的低位闪烁,按3 键,时的低位累加一。按4键,分的高位闪烁,按3 键,分的高位累加一。按4键,分的低位闪烁,按3 键,分的低位累加一。
需要设置开关1的开启时间,连续按5键2次,此时数码管2显示2,时间设定方法同上述的相同。
需要设置开关1的关断时间,连续按5键3次,此时数码管2显示3,时间设定方法同上述的相同。
需要设置开关2的开启时间,连续按5键4次,此时数码管2显示4,时间设定方法同上述的相同。
需要设置开关1的关断时间,连续按5键5次,此时数码管2显示5,时间设定方法同上述的相同。
需要查看开关1的开启时间,连续按5 键6次,此时数码管2显示6,数码管1显示的时间就是开关1的开启时间。
需要查看开关1的关断时间,连续按5 键7次,此时数码管2显示7,数码管1显示的时间就是开关1的关断时间。
需要查看开关2的开启时间,连续按5 键8次,此时数码管2显示8,数码管1显示的时间就是开关2的开启时间。
需要查看开关2的关断时间,连续按5 键9次,此时数码管2显示9,数码
4 电子与信息工程系 2012年6月
频率计设计
管1显示的时间就是开关2的关断时间。
定时插座的功能生效与否用键2来控制。按1 次关,然后按1次开,再按1一又关。
五、主要元器件与设备
ATS52芯片一片,LG2841,若干个参数完全相同的电阻
六、课程设计体会
这次课程设计让我学到了很多新的知识,不仅拓宽了知识面,还强化了自己的综合性、实际性。通过实验使自己掌握了应用单片机的基本技能,培养了动手能力,观察能力,分析和解决实际问题的能力,巩固、加深理论课知识,增加感性认识,进一步加深对单片机应用的理解,提高对单片机的应用能力和编程设,提高对常见单片机设计及电路故障的分析和判断能力;培养了严肃认真、实事求是的科学态度,理论联系实际的工作作风和辩证思维能力认识,进一步加深对单片机应用的理解,提高对单片机的应用能力和编程设计。
同时,掌握了单片机芯片的内部组成及存储器结构,理解了常用指令的功能和使用方法,掌握各种寻址方式及单片机的中断源,中断控制寄存器,中断响应过程,定时/计数器的电路结构、功能和使用方法,定时器/计数控制寄存器。
最后感谢老师对我的精心指导和帮助,感谢同学们对我的帮助。
七、参考文献
[1] 张洪润,蓝清华. 单片机应用技术教程[M] . 北京:清华大学出版社,1997. [2]张俊谟.单片机中级教程原理与应用[M]. 北京:北京航空航天大学出版社,2006. [3] 常斗南,等. 可编程序控制器原理、应用、实验[M] . 北京:机械工业出版社,1998. [4] 于海生,等. 微型计算机控制技术[M] . 北京:清华大学出版社,1999.
[5] 王福瑞,等. 单片机微机测控系统设计大全[M] . 北京:北京航空航天大学出版社,1998. [6] 刘国荣. 单片微型计算机技术[M] . 北京:机械工业出版社,1996. [8] 何立民. 单片机应用技术选编[M] . 北京:北京航空航天大学出版社,1993.
5 电子与信息工程系 2012年6月
频率计设计
附录:
源程序代码:
/*程控定时开关*/ #include /*包含库函数 */ /*七段数码,高电平有效 ,顺序为.gfedcba*/ unsigned char led[]={0,0,0,0};/*将四个LED定义成一个数组,用来显示时、分和秒 */ char code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned int counter;/* counter作为定时器中断次数的计数器*/ unsigned char n,w=0,flag=0,flag1=0,flag2=0; /*n为闪烁次数计数器,w为显示位计数器,flag为设置按键计数器,flag1和flag2均为延时消抖计数器*/ unsigned char K1_on=0,K2_on=0; 断状态寄存器*/ unsigned char h_data=0,m_data=0,s_data=0;/*时钟的时、分、秒计数器*/ unsigned char hdata1_on=0,mdata1_on=3, hdata2_on=0,mdata2_on=7; /*开关1和开关2的开启时间寄存器*/ unsigned char hdata1_off=0,mdata1_off=5,hdata2_off=0,mdata2_off=9;/*开关1和开关2的关断时间寄存器*/ void display(void); /*申明显示子程序*/ void delay(unsigned int j) /*定义可变延时子程序*/ { unsigned int i; } for(i=0;i void load_LED(unsigned char H,unsigned char M) /*定义将实际时间代码装LED显示区的子程序,作用是将个位和十位分离开*/ { led[0]=H/10; /*led[0]装时的十位*/ led[1]=H%10; /*led[1]装时的个位*/ led[3]=M%10; /*led[3]装分的个位*/ led[2]=M/10; /*led[2]装分的十位*/ } unsigned char H1_set(unsigned char H1) { H1=(H1/10+1)*10+H1%10;if(H1>23){H1=H1%10;};return H1;} /*定义时的十位加1函数*/ unsigned char H0_set(unsigned char H0) { if(H0%10==3&&H0/10==2) H0=H0/10*10;else H0=H0%10+1+H0/10*10;return H0;} /*定义时的个位加1函数*/ unsigned char M1_set(unsigned char M1) { M1=(M1/10+1)*10+M1%10;if(M1>=60){M1=M1%10;};return M1;} /*定义分的十位加1函数*/ 6 电子与信息工程系 2012年6月 频率计设计 unsigned char M0_set(unsigned char M0) { if(M0%10==9) M0=M0/10*10;else M0=M0%10+1+M0/10*10;return M0;} /*定义分的个位加1函数*/ void display(void) { /*char code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};/*定义0~9char code tv[]={0xfe,0xfd,0xfb,0xf7}; /*定义位码数组,用于控制显示码送到哪个LED*/ unsigned char k,i; switch(flag) /*根据设置所处的模式显示时钟*/ { case 0: {load_LED(h_data, m_data);break;} /*显示时钟*/ } { if(flag) /*如果处在设置模式,则对设置位进行闪烁显示*/ { if(n>180) /*每送显示180次则进行一次闪烁*/ n=0; if(k==w) /*如果送显示的位是正准备调整的位,则需要闪烁显示, 7 电子与信息工程系 2012年6月 /*定义显示子程序*/ 的LED显示段码数组,0x00为不显示(消隐)*/ case 1: {load_LED(h_data, m_data);break;} /*显示修改时钟设置*/ case 2: {load_LED(hdata1_on, mdata1_on);break;} /*显示设置开关1开启时间case 3: {load_LED(hdata1_off, mdata1_off);break;} /*显示设置开关1关断时case 4: {load_LED(hdata2_on, mdata2_on);break;} /*显示设置开关2开启时case 5: {load_LED(hdata2_off, mdata2_off);break;} /*显示设置开关2关断时case 6: {load_LED(hdata1_on, mdata1_on);break;} /*显示设置开关1设置case 7: {load_LED(hdata1_off, mdata1_off);break;} /*显示设置开关1设置好的case 8: {load_LED(hdata2_on, mdata2_on);break;} /*显示设置开关2设置 设置*/ 间设置*/ 间设置*/ 间设置*/ 好的开启时间*/ 关断时间*/ 好的开启时间*/ case 9: {load_LED(hdata2_off, mdata2_off);break;} /*显示设置开关2设置好的default:{P1=0xFF;load_LED(h_data, m_data);break;} /*其它情况下,显示时钟*/ n++; /*n用来对显示的次数进行计数,以便控制对需要设置的位进行闪烁*/ 关断时间*/ for(k=0;k<4;k++) /*以下为控制被设置位闪烁的程序语句*/ 以下两句是控制闪烁显示*/ { if(n<90) /*以下语句是将LED的七段码送P0口,前90 次显示*/ 频率计设计 } { } 8 电子与信息工程系 2012年6月 { } { } i=led[k]; /*将该LED位需要显示的数存于iP0=num[10]; /*该LED位不显示(短时消隐),P2=tv[k]; /*送需要显示的LED位码*/ delay(10); P0=num[i]; /*短时消隐延时,有利于显示位 /*将要显示的数字i作为七段 中*/ 送消隐段码*/ 的切换*/ 码表的序号(段码数组下标),取出显示码送显示*/ if(k==1) /*如果送显示的LED为分的个位*/ P0=num[i] | 0x80; /*则将分的个显示码附加 小数点*/ delay(100); /*显示延时,让LED充分点亮*/ else /*后90次消隐*/ P0=num[10];/*送LED消隐段码*/ if(k==1) /*如果要消隐的是分的个位*/ P0=num[10] | 0x80; /*则将分的个位后的 小数点点亮(小数点不闪烁)*/ P2=tv[k]; /*送消隐的位码(即哪个LED需要delay(100); /*消隐延时,让其充分消隐*/ 闪烁)*/ else /*如果送显示的位不调整的位,则不需要闪烁显示*/ i=led[k]; /*将该LED位需要显示的数存于i中*/ P0=num[10]; /*该LED位不显示(短时消隐),送P2=tv[k]; /*送需要显示的LED位码*/ delay(10); P0=num[i]; /*短时消隐延时,有利于显示位的切/*将要显示的数字i作为七段码表的 消隐段码*/ 换*/ 序号(段码数组下标),取出显示码送显示*/ if(k==1) /*如果送显示的LED为分的个位*/ { P0=num[i] | 0x80;}/*则将分的个显示码附加小数 delay(100); /*显示延时,让LED充 点*/ 分点亮*/ 频率计设计 */ /********************************************************************************************************/ void adjust(void) { if(P3_0==0) { delay(100); while(P3_0==0) {flag1++; display();} /*当调整键按下时,延时消抖,flag1控 /*调整函数定义*/ } } delay(100); /*显示延时,让LED充分点亮*/ } P0=num[i]; if(k==1) /*将要显示的数字i作为七段码表的序号 (段码数组下标),取出显示码送显示*/ /*如果送显示的LED为分的个位*/ /*则将分的个显示码附加小数点*/ { P0=num[i] | 0x80;} } /*如果不是处在设置模式,则正常显示*/ else { load_LED(h_data, m_data); /*调用将实际时间代码装LED显示区的子 i=led[k]; /*将该LED位需要显示的数存于i中*/ /*该LED位不显示(短时消隐),送消隐 程序,分离个位和十位*/ P0=num[10]; P2=tv[k]; delay(10); 段码*/ /*送需要显示的LED位码*/ /*短时消隐延时,有利于显示位的切换 制延迟时间*/ if(flag1>50) { flag1=0; flag++; /*用flag对调整键按下次数计数,目的是通过一个按键 实现多种功能 */ if(flag>=10) {flag=0;} } } /****************************************************************************** 9 电子与信息工程系 2012年6月 频率计设计 *******/ } if(w==0) {hdata1_on=H1_set(hdata1_on);display();} if(w==1) {hdata1_on=H0_set(hdata1_on);display();} if(w==2) 10 电子与信息工程系 2012年6月 if(P3_1==0) /*移位控制键,在4个LED上来回移动,选择需要设置的 { delay(100); display(); /*当flag不等于0时,说明处于调整状态,此时通过移 /*消抖*/ LED位*/ while(P3_1==0) if(flag) } { 位键选择调整哪一个LED*/ w=w+1; /*移位键控制w加1,用于修改位码,w代表4 个LED数码管的某一位*/ if(w>=4) w=0; } /************************************************************************** *****/ if(P3_2==0) /*加1操作*/ if(flag) /*当处于调整模式时,对所选择的LED进行加1*/ { switch(flag) { case 1:{ if(w==0) {h_data=H1_set(h_data);display();} /*校准时间 if(w==1) {h_data=H0_set(h_data);display();} if(w==2) {m_data=M1_set(m_data);display();} if(w==3) {m_data=M0_set(m_data);display();} break; { /*消抖*/ delay(100); display(); while(P3_2==0) 的时、分*/ case 2: { /*设置开关1开启时间的时、分*/ 频率计设计 default:{TR0=1;break;} 11 电子与信息工程系 2012年6月 {mdata1_on=M1_set(mdata1_on);display();} if(w==3) {mdata1_on=M0_set(mdata1_on);display();} } if(w==0) {hdata1_off=H1_set(hdata1_off);display();} if(w==1)if(w==2)if(w==3)break; case 3: { /*设置开关1关断时间的时、分*/ {hdata1_off=H0_set(hdata1_off);display();} {mdata1_off=M1_set(mdata1_off);display();} {mdata1_off=M0_set(mdata1_off);display();} } if(w==0) {hdata2_on=H1_set(hdata2_on);display();} if(w==1) {hdata2_on=H0_set(hdata2_on);display();} if(w==2)if(w==3)break; case 4: { /*设置开关2开启时间的时、分*/ {mdata2_on=M1_set(mdata2_on);display();} {mdata2_on=M0_set(mdata2_on);display();} } if(w==0) {hdata2_off=H1_set(hdata2_off);display();} if(w==1)if(w==2)if(w==3) case 5: { break; /*设置开关2关断时间的时、分*/ {hdata2_off=H0_set(hdata2_off);display();} {mdata2_off=M1_set(mdata2_off);display();} {mdata2_off=M0_set(mdata2_off);display();} } break; 频率计设计 void timer0() interrupt 1 /*定时器中断1服务子程序*/ { } { IE=0x8a; /*EA|-|-|ES|ET1|EX1|ET0|EX0=10001010中断允许控制*/ TMOD=0x02; /*GATE1|C/T|M1|M0|GATE0|C/T|M1|M0=00000010只由TR0来启动TH0=176/*计数常数寄存器设置,中断定时时间为(256+200)x12/f0 */ TL0=-176/*定时计数器装初值*/ TR0=1; /*启动定时器T0,TCON为TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0*/ P3_6=1; /*关断定时开关1*/ 12 电子与信息工程系 2012年6月 } } } } counter++; { /*counter对定时中断进行计数,10000次中断为1秒*/ if(counter==10000 s_data++; /*个位秒向十位秒进位*/ counter=0; } /*如果秒计满60则向分进位,并将秒清0*/ s_data=0; /*秒清0*/ m_data++; /*分进位 */ { } /*如果分计满60则向时进位,并将分清0*/ /*分清0*/ /*时进位 */ { } /*如果时计满24则将时清0*/ /*时清0*/ { } h_data=0; m_data=0; h_data++; if(s_data==60) if(m_data==60) if(h_data==24) main(void) T0,T0工作于方式2,(自动再装入的8位计数器)*/ 频率计设计 P3_7=1; /*关断定时开关2*/ { adjust(); /*调用调整函数*/ /*以下程序语句作用是:将设定的开启时间和关断时间分别跟当前时间进行比当大于开启时间小于关断时间则在P3.6或P3.7输出低电平使开关接通,否则 K1_on=h_data>hdata1_on&&h_data 较, 输出高电平使开关断开*/ m_data>=mdata1_on&&m_data } if(K1_on) P3_6=0; else P3_6=1; if(K2_on) P3_7=0; else P3_7=1; display(); 13 电子与信息工程系 2012年6月
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务