版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 重庆科技学院单片机关于电脑时钟的实训的报告重庆科技学院学生实习(实训)总结报告 学 院:_ _ 专业班级:_ _学生姓名:_ _ 学 号:_ _ _实习(实训)地点:_i506_ _ _报告题目:_ 关于电脑时钟的实训_ _ 报告日期: 2013 年 12 月 26 日 指导教师评语: _ _ _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ 目录 一、实习目的意义和任务11.1 实习目的意义11.2 任务2二、实习任务的方案3三、系统硬件设计33.1 单片机的最小系统33.2 矩阵按键电路的设计43.3 蜂鸣器电路的设计53.4 数码管及led电路的设计53.5 lcd电路的设计6
2、四、系统软件设计6 4.1 主程序设计6 4.2 中断子程序设计7 4.3 时间设置子程序设计7 4.4 音乐铃声子程序设计9五、调试及性能分析11 5.1 调试步骤11 5.2 性能分析11六、 心得体会11附录 1 系统硬件电路图12附录 2程序清单13一、实习目的意义和任务1.1 实习目的意义单片机的使用领域已十分广泛,如智能仪器仪表、实时工控、通讯设备、导航系统、家用电器等。单片机作为一门基础学科,既是对前期学习c语言的综合运用,也是理论与实践相结合的一大体现。电脑时钟有效地检验了对stc89c52单片机中断,矩阵键盘,数码管,蜂鸣器,led灯的控制,同时提高了学生的工程系统设计能力。
3、led数码管显示时钟显示清晰直观、走时准确、可以进行夜视,并且还可以根据需要扩展出多种功能。因此,电脑时钟无论作为比赛题目还是练习题目都是很有价值。通过此次单片机系统综合训练,不仅要让学生认识了解它,而且增强学生学科积极性。1.2 任务设计题目:电脑时钟设计学生姓名课程名称单片机系统综合训练专业班级地 点实验楼i512起止时间16周-17周设计内容及要求要求设计的电脑时钟完成以下功能:1.基本功能实时显示当前时间按设定时间用蜂鸣器报时能修改当前时钟。2. 扩展功能自行扩展功能,如音乐铃声,通讯功能等。设计参数 显示时间时,4位数码管显示,2位显示小时,2位显示分钟,第2位小数点0.5秒亮,0.
4、5秒灭;蜂鸣器报时时间以每生学号最末位确定。 进度要求内容时间地点布置设计任务及要求,查资料,准备方案keil c51程序设计练习(定时器程序设计、数码管显示程序设计)2天i512时间程序设计、调试2天i512键盘控制程序设计、调试2天i512程序整体调试2天i512设计验收,完成设计报告2天i512参考资料单片机应用设计指导书其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师: 2013年 12 月 二、实习任务的方案 我采用stc8
5、9c52芯片,晶振为11.0592mhz,通过定时器计时来实现时钟的功能。按键采用矩阵键盘,来实现模式更改、修改小时、修改分钟、加、减以及拓展功能。系统能按设定时间用蜂鸣器报时,报时时间设定为1s。拓展功能做了音乐铃声和液晶显示。三、系统硬件设计3.1 单片机的最小系统 单片机最小系统由stc89c51单片机、复位电路、晶振电路组成,如图3.1. 图3.13.2 矩阵按键电路的设计按键行数keyin端接单片机p2口的高四位, 按键行数keyout端接单片机p2口的低四位。如图3.2按键功能设定:k1:led数码管显示。k2:lcd液晶显示。k4:加数值。k8:修改小时。k12:减数值。k13:
6、修改报警时间。k14:修改时间。k15:返回。k16:修改分钟。 图3.23.3 蜂鸣器电路的设计 单片机不直接与蜂鸣器连接,通过控制三极管的导通来控制蜂鸣器的工作,如图3.3。 图3.33.4 数码管及led电路的设计 数码管为共阳,通过38译码器来是实现位选。38译码器的输入端a0、a1、a2分别接接单片机的p1.0、p1.1、p1.2,通过38译码器选通数码管上面的三极管,从而实现数码管的选择,如图3.4. 图3.43.5 lcd电路的设计 lcd数据端连接单片机的p0口,rs、wr、e分别接p1.0、p1.1、p1.4,如图3.5. 图3.5四、系统软件设计开始4.1 主程序设计 音乐
7、铃声定时器0初始化采集按键输入的信息 是到点报警buzzflag=1是否改报警时间否改时间 修改报警时间是 否修改时间 图4.1开始4.2 中断子程序设计count计数定时器赋初值报警1s是报警否是是是1小时1分钟1秒时间hour+minute+second+否否否结束 图4.24.3 时间设置子程序设计/* 时间设置函数 */void timeset() if(hourflag=1) /改小时 if(upflag=1) upflag=0; hour+;if(hour=24)hour=0; if(downflag=1) downflag=0; if(hour=0)hour=23; else h
8、our-; if(minuteflag=1) /改分钟 if(upflag=1) upflag=0; minute+;if(minute=60)minute=0; if(downflag=1) downflag=0; if(minute=0)minute=59; else minute-; count=0; /计数初始化 count_s=0; second=0;4.4 音乐铃声子程序设计void playtwotiger() unsigned char beat; /记录当前节拍索引 unsigned char note; /当前节拍对应的音符 unsigned int time = 0; /
9、当前节拍计时 unsigned int beattime = 0; /当前节拍总时间 unsigned int soundtime = 0; /当前节拍需发声时间 unsigned char code twotigernote = /两只老虎音符表 1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5, 5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1, ; unsigned char code twotigerbeat = /两只老虎节拍表,4表示一拍,1就是1/4拍,8就是2拍 4, 4, 4, 4, 4, 4,
10、4, 4, 4, 4, 8, 4, 4, 8, 3,1, 3,1, 4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8, ; for (beat=0; beat 8; t1loadl = notereloadnote; beattime = (twotigerbeatbeat * notefrequnote) 2; /计算节拍总时间,右移2位相当于除4,移位代替除法可以加快执行速度 soundtime = beattime - (beattime 2); /计算发声时间,为总时间的0.75,移位原理同上 buzzable = 1; /指示蜂鸣器开始发声 time+;
11、else if (time = beattime) time = 0; /当前持续时间到达节拍总时间时归零,并递增节拍索引,以准备启动新节拍 beat+; else time+; if (time = soundtime) buzzable = 0; /当前持续时间到达发声时间后,指示关闭蜂鸣器,以插入0.25*总时间的静音间隔,以区分连续的节拍 五、调试及性能分析5.1 调试步骤 按照任务书中功能的要求依次调试各个功能函数。首先调试显示函数。开始是把hour、minute赋给数码管,结果当数字超过16时显示是乱码的。通过调试,将hour/10、hour%10、minute/10、minute
12、%10分别赋给数码管,数码管就可以正确显示小时分钟。时间秒的显示是通过小数点闪烁来实现的,定义了一个变量count_s,当count_s为100时(0.5s的时间),让p0&0x7f使小数点以0.5s间隔闪烁。调试报警函数时,当修改时间正好为报警时间,蜂鸣器会一直响。因为在修改时间的时候,函数会一直给count、coun_s、second变量赋0,这时时间就一直达到报警的时间,所以蜂鸣器一直响。在报警函数前加一个报警使能标志buzzable,当修改时间时buzzable赋0。只有当buzzable=1,才能执行报警函数。加入液晶后,在液晶显示状态下修改时间时,数码管会以闪烁地方式显示数字。通过
13、对程序的分析,我发现在液晶显示的状态下,数码管是有可能工作的。于是我加入了液晶和数码管工作使能标志lcdflag和ledflag。在液晶显示的状态下,ledflag为0,数码管是不会工作;同样,在数码管显示状态下,lcdflag为0,液晶不显示数据。5.2 性能分析 系统采用stc89c52芯片,晶振频率为11.0592mhz。因此,系统计时准确,使用快捷。采用led数码管显示和液晶显示,在黑暗的环境下也能看清时间。同时这两种显示可根据个人喜好随意切换,系统使用灵活多变。同时添加了音乐铃声,音乐播放清晰,使得系统功能多样化。6、 心得体会 多功能电脑时钟是以单片机为核心部件,配以适当的外围电路
14、及软件,实现建立系统时钟、闹钟、输入、修改等功能。电路部分包括数码管显示电路、矩阵按键电路、液晶电路、蜂鸣器电路。本次设计是软硬件结合的设计,综合提高我们的硬件、软件设计与开发的综合能力以及软件和硬件联合调试的能力,为以后参加科技创新比赛作奠定了基础。本次实训内容用到了矩阵按键、数码管、蜂鸣器、液晶等硬件,使用硬件比较多,与之前做的小实验相比程序更复杂,各个功能联系密切,需要考虑的方面也比较多,比较考验个人能力。其中,液晶是我自己添加的拓展功能。本来我也在学习单片机的各个硬件的使用,我也一直很想学会使用液晶。正好这次实训任务可以用到液晶,我就通过视屏,学习液晶的使用方法。在学习液晶的过程中,也
15、慢慢地学习查看数据手册。视屏中,老师也强调了要学会查看数据手册。开始可以先看中文的数据手册,慢慢再看英文数据手册。通过两周的实训,我锻炼了独自分析解决任务的能力。通过任务书的要求,构思实现功能的方案,再把方案实施出来。然后通过调试程序,分析问题的关键之处,使得实验结果更好,锻炼了自己软件方面的动手能力,也增加了自己编写程序的经验。硬件方面,通过学习别人设计的电路图,学会了分析电路原理图,结合模电里学习的硬件知识,也理解了三极管以及一些电阻、电容的使用。参考文献王景景.单片机原理及应用m.北京:机械工业出版社,2010附录 1 系统硬件电路图附录 2程序清单#include#define uch
16、ar unsigned char #define uint unsigned int/中音1-7和高音1-7对应频率列表unsigned int code notefrequ = 523, 587, 659, 698, 784, 880, 988, /中音1-7 1047, 1175, 1319, 1397, 1568, 1760, 1976 /高音1-7; /中音1-7和高音1-7对应的定时器重载值unsigned int code notereload = 65536 - (11059200/12) / (523*2), /中音1-7 65536 - (11059200/12) / (58
17、7*2), 65536 - (11059200/12) / (659*2), 65536 - (11059200/12) / (698*2), 65536 - (11059200/12) / (784*2), 65536 - (11059200/12) / (880*2), 65536 - (11059200/12) / (988*2), 65536 - (11059200/12) / (1047*2), /高音1-7 65536 - (11059200/12) / (1175*2), 65536 - (11059200/12) / (1319*2), 65536 - (11059200/12
18、) / (1397*2), 65536 - (11059200/12) / (1568*2), 65536 - (11059200/12) / (1760*2), 65536 - (11059200/12) / (1976*2),; uchar t1loadh = 0xff; /t1重载值的高字节uchar t1loadl = 0x00; /t1重载值的低字节sbit enled = p14; /38译码器设置sbit addr0 = p10;sbit addr1 = p11;sbit addr2 = p12;sbit addr3 = p13;sbit buzz=p16;sbit rs = p
19、10 ;sbit rw = p11 ;sbit en = p15 ;sbit busy = p07;bit lcdflag=0;bit ledflag=1;bit hourflag=0;bit minuteflag=0;bit upflag=0;bit downflag=0;bit modflag=0;bit buzzflag=0;bit changeflag=0;bit buzzable=1; /报警使能bit tmrflag = 0; /定时器中断完成标志uchar count=0;uchar count_s=0; /秒计数uchar count_buzz=0; /报警计数 uchar s
20、econd=0;uint minute=0;uint hour=0;uchar second_cmd;uint minute_cmd;uint hour_cmd;uchar code showcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90;void playtwotiger();void init_time(); /定时器初始化设置函数 void xianshi(); /数码管显示函数void keyscan(); /键盘扫描函数void timeset(); /时间修改函数void baojing(); /报警函数void ti
21、mecmd(); /时间比较函数void buzzchange(); /报警时间修改函数void youxiao(); /按键有效函数void wait();/等待繁忙标志void w_dat(uchar dat); / lcd写数据void w_cmd(uchar cmd);/lcd写命令void init_lcd1602(void); /初始化1602void w_string(uchar addr_start, uchar p);/发送字符到lcdvoid music();void delay1(); / 按键消抖延时函数void delay2(); /数码管显示延时函数void mai
22、n(void) /主函数 music();init_time();init_lcd1602();hour_cmd=0; /报警时间设置minute_cmd=1;second_cmd=0; while(1) keyscan(); timecmd(); if(modflag=1&changeflag=0) timeset(); if(changeflag=1&modflag=0) buzzchange(); /* 中断 */void t0(void) interrupt 1 count+; th0=(65536-4608)/256; /11.0592mhz 5ms一次溢出 tl0=(65536-4
23、608)%256; xianshi(); if(buzzflag=1&buzzable=1) baojing();count_buzz+;if(count_buzz=200) count_buzz=0; buzzflag=0; if(count=200) count=0; second+; if(second=60) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0; /* 按键消抖延时函数 */void delay1()uint i;for (i=4000;i0;i-);/* 数码管显示延时函数 */vo
24、id delay2()uint z;for (z=100;z0;z-);/*时钟初始化*/void init_time() tmod=0x01; /定时器方式初始化 th0=(65536-4608)/256; /11.0592mhz 5ms一次溢出 tl0=(65536-4608)%256; tr0=1; et0=1; ea=1;/*液晶显示函数*/void lcd_xianshi() w_string(0x80,(hour/10)+0); w_string(0x81,(hour%10)+0); w_string(0x82,:); w_string(0x83,(minute/10)+0); w
25、_string(0x84,(minute%10)+0); w_string(0x85,:); w_string(0x86,(second/10)+0); w_string(0x87,(second%10)+0); w_string(0xc0,a); w_string(0xc1,c); w_string(0xc2,l); w_string(0xc4,(hour_cmd/10)+0); w_string(0xc5,(hour_cmd%10)+0); w_string(0xc6,:); w_string(0xc7,(minute_cmd/10)+0); w_string(0xc8,(minute_c
26、md%10)+0);/*数码管显示函数*/void xianshi() count_s+; if(lcdflag=1) lcd_xianshi(); else if(changeflag=1) p0=0xff; enled = 0; addr0 = 0;addr1 = 0;addr2 = 0;addr3 = 1;/38译码器选择数码管0(译码器输入000) p0=showcodeminute_cmd%10; delay2(); p0=0xff; enled = 0; addr0 = 1;addr1 = 0;addr2 = 0;addr3 = 1;/38译码器选择数码管1(译码器输入001) p
27、0=showcodeminute_cmd/10; delay2(); p0=0xff; enled = 0; addr0 = 0;addr1 = 1;addr2 = 0;addr3 = 1;/38译码器选择数码管2(译码器输入010) p0=showcodehour_cmd%10; delay2(); /* 第2位小数点0.5秒亮,0.5秒灭 */ if (count_s=100) count_s=0; enled = 0; addr0 = 0;addr1 = 1;addr2 = 0;addr3 = 1;/38译码器选择数码管2(译码器输入010) p0=p0&0x7f; delay2();
28、p0=0xff; enled = 0; addr0 = 1;addr1 = 1;addr2 = 0;addr3 = 1;/38译码器选择数码管3(译码器输入011) p0=showcodehour_cmd/10; delay2(); else p0=0xff; enled = 0; addr0 = 0;addr1 = 0;addr2 = 0;addr3 = 1;/38译码器选择数码管0(译码器输入000) p0=showcodeminute%10; delay2(); p0=0xff; enled = 0; addr0 = 1;addr1 = 0;addr2 = 0;addr3 = 1;/38
29、译码器选择数码管1(译码器输入001) p0=showcodeminute/10; delay2(); p0=0xff; enled = 0; addr0 = 0;addr1 = 1;addr2 = 0;addr3 = 1;/38译码器选择数码管2(译码器输入010) p0=showcodehour%10; delay2(); /* 第2位小数点0.5秒亮,0.5秒灭 */ if (count_s=100) count_s=0; enled = 0; addr0 = 0;addr1 = 1;addr2 = 0;addr3 = 1;/38译码器选择数码管2(译码器输入010) p0=p0&0x7
30、f; delay2(); p0=0xff; enled = 0; addr0 = 1;addr1 = 1;addr2 = 0;addr3 = 1;/38译码器选择数码管3(译码器输入011) p0=showcodehour/10; delay2(); enled = 1;/* 键盘扫描函数 */void keyscan()/键盘扫描函数 uchar temp;p2=0xf7;temp=p2;temp=temp&0xf0;if(temp!=0xf0)delay1();/键盘去抖,temp=p2;temp=temp&0xf0;if(temp!=0xf0) temp=p2;youxiao();swi
31、tch(temp) case 0xe7: ledflag=1;lcdflag=0;init_lcd1602();break; /数码管显示case 0xd7: ledflag=0;lcdflag=1;enled=1;break; /液晶显示 enled=1; 关ledcase 0x77: upflag=1;break; / 1:加数值default :break;while(temp!=0xf0) /按键抬起检测temp=p2;temp=temp&0xf0;p2=0xfb;temp=p2;temp=temp&0xf0;if(temp!=0xf0)delay1();temp=p2;temp=te
32、mp&0xf0;if(temp!=0xf0) temp=p2; youxiao();switch(temp)case 0x7b:hourflag=1;minuteflag=0;break; / 2:改小时default :break; while(temp!=0xf0)temp=p2;temp=temp&0xf0;p2=0xfd;temp=p2;temp=temp&0xf0;if(temp!=0xf0)delay1();temp=p2;temp=temp&0xf0;if(temp!=0xf0) temp=p2; youxiao();switch(temp)case 0x7d:downflag=
33、1;break; /3:减数值default :break;while(temp!=0xf0)temp=p2;temp=temp&0xf0;p2=0xfe;temp=p2;temp=temp&0xf0;if(temp!=0xf0)delay1();temp=p2;temp=temp&0xf0;if(temp!=0xf0) temp=p2; youxiao();switch(temp) case 0xee:changeflag=1;modflag=0;buzzable=0;break;/报警时间修改case 0xde:modflag=1;changeflag=0;buzzable=0;break
34、; /功能case 0xbe:modflag=0;changeflag=0;buzzflag=0;buzzable=1;break;/返回时钟显示 case 0x7e:minuteflag=1;hourflag=0;break;/修改分钟while(temp!=0xf0)temp=p2;temp=temp&0xf0;/* 时间设置函数 */void timeset() if(hourflag=1) /改小时 if(upflag=1) upflag=0; hour+;if(hour=24)hour=0; if(downflag=1) downflag=0; if(hour=0)hour=23;
35、else hour-; if(minuteflag=1) /改分钟 if(upflag=1) upflag=0; minute+;if(minute=60)minute=0; if(downflag=1) downflag=0; if(minute=0)minute=59; else minute-; count=0; /计数初始化 count_s=0; second=0;/*报警函数*/void baojing() buzz=buzz; delay2(); buzz=buzz; delay2();/*时间比较函数*/void timecmd() if(hour_cmd=hour&minute
36、_cmd=minute&second_cmd=second) buzzflag=1; /* 报警时间修改函数 */void buzzchange() if(hourflag=1) /改小时 if(upflag=1) upflag=0; hour_cmd+;if(hour_cmd=24)hour_cmd=0; if(downflag=1) downflag=0; if(hour_cmd=0)hour_cmd=23; else hour_cmd-; if(minuteflag=1) /改分钟 if(upflag=1) upflag=0; minute_cmd+;if(minute_cmd=60)m
37、inute_cmd=0; if(downflag=1) downflag=0; if(minute_cmd=0)minute_cmd=59; else minute_cmd-; /* 按键有效函数 */void youxiao() uchar a; for(a=0;a40;a+) buzz=buzz; delay2(); /* 等待繁忙标志*/void wait(void)p0 = 0xff;dors = 0;rw = 1;en = 0;en = 1;while (busy = 1);en = 0;/* 写数据*/void w_dat(uchar dat)wait();en = 0;p0 = dat;rs = 1;rw = 0;en = 1;en = 0;/* 写命令*/void w_cmd(uchar cmd)wait();en = 0;p0 = cmd;rs = 0;rw = 0;en = 1;en = 0;/*初始化1602*/void init_lcd1602(void)w_cmd(0x38); / 16*2显示,5*7点阵,8位数据接口w_cmd(0x0c); / 显示器开w_cmd(0x06); / 文字不动,光标自动右移w_cmd(0x01); / 清屏/*发送字符到lcd*/void w_str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省宜兴市实验中学2026届高二生物第一学期期末联考试题含解析
- 医疗数据安全人才培养体系建设
- 河南省通许县丽星高级中学2026届高三生物第一学期期末考试模拟试题含解析
- 2026届陕西省西安市西电附中语文高三第一学期期末质量跟踪监视模拟试题含解析
- 湖南省十四校联考2026届数学高一上期末质量检测模拟试题含解析
- 文库发布:胃疾病课件
- 胀差应对课件
- 医疗数据区块链共享的跨部门协同机制
- 34:2024届天津市南开中学高三第五次月检测(模拟考试)物理试卷学生版答案
- DB14-T 3582-2025 城镇污水处理厂环境绩效评价指南
- 居间服务费合同(标准版)
- 国际碳减排机制下我国海运业低碳发展的系统动力学建模与策略研究
- 幼儿园小班语言《老鼠阿姨的礼物》课件
- GB/T 31970-2025汽车气压制动钳总成性能要求及台架试验方法
- 高速消防安全知识培训课件
- 社区矫正培训课件教学
- 测评题库及答案京东
- 沥青混凝土供货方案及保障措施
- 鹏城实验室双聘管理办法
- 船舶设备故障预测模型及维护优化策略
- 国家开放大学《商务英语1》形考任务综合测试答案
评论
0/150
提交评论