关于电脑时钟的实训学生实习实训总结报告(编辑修改稿)内容摘要:

oTigerBeat[beat] * NoteFrequ[note]) 2。 //计算节拍总时间,右移 2 位相当于除 4,移位代替除法可以加快执行速度 soundTime = beatTime (beatTime 2)。 //计算发声时间,为总时间的 ,移位原理同上 buzzable = 1。 //指示蜂鸣器开始发声 time++。 } else { if (time = beatTime) { time = 0。 //当前持续时间到达节拍总时间时归零,并递增节拍索引,以准备启动新节拍 beat++。 重庆科技学院单片机《关于电脑时钟的实训》的报告 11 } else { time++。 if (time == soundTime) { buzzable = 0。 //当前持续时间到达发声时间后,指示关闭蜂鸣器,以插入*总时间的静音间隔,以区分连续的节拍 } } } } } 五、调试及性能分析 调试步骤 按照任务书中功能的要求依次调试各个功能函数。 首 先调试显示函数。 开始是把hour、 minute 赋给数码管,结果当数字超过 16 时显示是乱码的。 通过调试,将 hour/hour% minute/ minute%10 分别赋给数码管,数码管就可以正确显示小时分钟。 时间秒的显示是通过小数点闪烁来实现的,定义了一个变量 count_s,当 count_s 为 100时( 的时间),让 P0amp。 0x7f 使小数点以 间隔闪烁。 调试报警函数时,当修改时间正好为报警时间,蜂鸣器会一直响。 因为在修改时间的时候,函数会一直给 count、 coun_s、 second 变 量赋 0,这时时间就一直达到报警的时间,所以蜂鸣器一直响。 在报警函数前加一个报警使能标志 buzzable,当修改时间时buzzable 赋 0。 只有当 buzzable=1,才能执行报警函数。 加入液晶后,在液晶显示状态下修改时间时,数码管会以闪烁地方式显示数字。 通过对程序的分析,我发现在液晶显示的状态下,数码管是有可能工作的。 于是我加入了液晶和数码管工作使能标志 lcdflag 和 ledflag。 在液晶显示的状态下, ledflag 为 0, 重庆科技学院单片机《关于电脑时钟的实训》的报告 12 数码管是不会工作;同样,在数码管显示状态下, lcdflag 为 0,液晶不显示数据。 性能分析 系统采用 STC89C52 芯片,晶振频率为。 因此,系统计时准确,使用快捷。 采用 LED 数码管显示和液晶显示,在黑暗的环境下也能看清时间。 同时这两种显示可根据个人喜好随意切换,系统使用灵活多变。 同时添加了音乐铃声,音乐播放清晰,使得系统功能多样化。 六、 心得体会 多功能电脑时钟是以单片机为核心部件,配以适当的外围电路及软件,实现建立系统时钟、闹钟、输入、修改等功能。 电路部分包括数码管显示电路、矩阵按键电路、液晶电路、蜂鸣器电路。 本次设计是软硬件结合的设计,综合提高我们 的硬件、软件设计与开发的综合能力以及软件和硬件联合调试的能力,为以后参加科技创新比赛作奠定了基础。 本次实训内容用到了矩阵按键、数码管、蜂鸣器、液晶等硬件,使用硬件比较多,与之前做的小实验相比程序更复杂,各个功能联系密切,需要考虑的方面也比较多,比较考验个人能力。 其中,液晶是我自己添加的拓展功能。 本来我也在学习单片机的各个硬件的使用,我也一直很想学会使用液晶。 正好这次实训任务可以用到液晶,我就通过视屏,学习液晶的使用方法。 在学习液晶的过程中,也慢慢地学习查看数据手册。 视屏中,老师也强调了要学会查看数据手册。 开始可以先看中文的数据手册,慢慢再看英文数据手册。 通过两周的实训,我锻炼了独自分析解决任务的能力。 通过任务书的要求,构思实现功能的方案,再把方案实施出来。 然后通过调试程序,分析问题的关键之处,使得实验结果更好,锻炼了自己软件方面的动手能力,也增加了自己编写程序的经验。 硬件方面,通过学习别人设计的电路图,学会了分析电路原理图,结合模电里学习的硬件知识,也理解了三极管以及一些电阻、电容的使用。 参考文献 王景景 .单片机原理及应用 [M].北京:机械工业出版社, 20xx 重庆科技学院单片机《关于电脑时钟的实训》的报告 13 附录 1 系统硬件电路图 附录 2 程序清单 include define uchar unsigned char define uint unsigned int //中音 17 和高音 17 对应频率列表 unsigned int code NoteFrequ[] = { 523, 587, 659, 698, 784, 880, 988, //中音 17 1047, 1175, 1319, 1397, 1568, 1760, 1976 //高音 17 }。 //中音 17 和高 音 17 对应的定时器重载值 unsigned int code NoteReload[] = { 65536 (11059200/12) / (523*2), //中音 17 65536 (11059200/12) / (587*2), 重庆科技学院单片机《关于电脑时钟的实训》的报告 14 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), //高音 17 65536 (11059200/12) / (1175*2), 65536 (11059200/12) / (1319*2), 65536 (11059200/12) / (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 = P1^4。 //38 译码器设置 sbit ADDR0 = P1^0。 sbit ADDR1 = P1^1。 sbit ADDR2 = P1^2。 sbit ADDR3 = P1^3。 sbit BUZZ=P1^6。 sbit RS = P1^0。 sbit RW = P1^1。 sbit EN = P1^5。 sbit BUSY = P0^7。 bit lcdflag=0。 重庆科技学院单片机《关于电脑时钟的实训》的报告 15 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 second=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 timecmd()。 //时间比较函数 重庆科技学院单片机《关于电脑时钟的实训》的报告 16 void buzzchange()。 //报警时间修改函数 void youxiao()。 //按键有效函数 void wait()。 //等待繁忙标志 void w_dat(uchar dat)。 // LCD 写数据 void w_cmd(uchar cmd)。 //LCD 写命令 void Init_LCD1602(void)。 //初始化 1602 void w_string(uchar addr_start, uchar p)。 // 发送字符到 LCD void music()。 void delay1()。 // 按键消抖延时函数 void delay2()。 // 数码管显示延时函数 void main(void) //主函数 { music()。 init_time()。 Init_LCD1602()。 hour_cmd=0。 //报警时间设置 minute_cmd=1。 second_cmd=0。 while(1) { keyscan()。 timecmd()。 if(modflag==1amp。 amp。 changeflag==0) { timeset()。 } if(changeflag==1amp。 amp。 modflag==0) { buzzchange()。 } 重庆科技学院单片机《关于电脑时钟的实训》的报告 17 } } /* 中断 */ void t0(void) interrupt 1 { count++。 TH0=(655364608)/256。 // 5ms 一次溢出 TL0=(655364608)%256。 xianshi()。 if(buzzflag==1amp。 amp。 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++。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。