单片机课程设计--基于51单片机的定时闹钟设计内容摘要:

时器来计时,然后通过来判断计时器和闹铃时间来使闹铃响,通过对单片机的一些端口进行扫描来判断时分秒的调整,选择计时器调时还是定时闹钟的调时以及是否闹铃。 单片机课程设计报告 10 主程序开始 初始化 LCD 程序流程图 初始化变量 初始化计时器 ,初始化闹铃 扫描显示器更新时间数据, 闹钟时间是不是到了。 是否按下 4 个按键 NO YSE K1:调时 K2:调分 K3:完成 K4:打开闹铃 图 6 程序流程图 单片机课程设计报告 11 四、 proteus 仿真说明 1,开始程序 图 7 显示器开始及定时 图 8 定时闹铃开并调定时闹钟的时间 ,计时时间到了定时闹铃的时间后,喇叭开始叫 单片机课程设计报告 12 图 9 仿真结果 五、课程设计体会 这次课程设计一个星期,刚知道课程设计的时候感觉题目很简单,应该花很少的时间就可以完成课程设计,感觉如果用汇编语 言的话感觉程序会有点多,所以我决定用 C 语言编程,开始编程时,发现编程的时候就有些问题了。 要学会怎么用 KEIL,然后把生成的HEX 文档,把它加载到 Proteus 里的 89C52 芯片,使芯片能工作。 这次仿真要用到单片机种最重要的两个部分,外部中断和外部计时器,另外学会了如何驱动 1602 液晶显示器。 这次课程设计让我学会了怎么用 C 语言来编写程序以供单片机使用,对单片机中的外部中断还有一些 P0, P1, P2 口的使用, P0 需要添加上拉电阻,对单片有了更加深入的了解,对 Proteus, keil 的使用更加熟练了。 实验中同样出现 些问题,比如闹钟的设定以及 K4 功能的实现,还有延时功能的实现,所以要对单片机的执行程序需要的机器周期得完全了解清楚,用汇编语言容易计算所用的机器周期,用 C 语言的话就难些,这次课程设计使单片机能够实现定时闹钟的功能,实现了这次设计的要求。 这次课程设计让我更加认真的自己做了些以前想做想学的东西,并且认识到要多请教同学。 单片机课程设计报告 13 六、 参考文献 [1]余发山 .单片机原理及应用技术 .中国矿业大学出版社 [2]刘和平 . 单片机编程与入门 .重庆大学出版社 [3]郭天祥、 51 单片机 C 语言教程、电子工业出版社、 [4]刘瑞新 . 单片机原理及应用教程 .北京机械工业出版社 七、 程序 源程序代码 include define uchar unsigned char define uint unsigned int uchar code shuzi[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x20}。 //阿拉伯数字 9 0x2a 表示: * uchar kongbai=0x20。 sbit rs=P2^5。 sbit rw=P2^6。 sbit en=P2^7。 sbit k1=P1^0。 sbit k2=P1^1。 sbit k3=P1^2。 sbit k4=P1^3。 sbit led_miao=P1^7。 sbit buzz=P2^3。 sbit lamp=P2^4。 uchar shi1=0x85,shi2=0x86。 uchar fen1=0x88,fen2=0x89。 uchar ns1=0xcb,ns2=0xcc。 uchar nf1=0xce,nf2=0xcf。 uchar aaak1=1,aaak2=1,aaak3=1,aaak4=1,clockon,ringoff。 单片机课程设计报告 14 uchar b,c,d,e,ch,hou=10。 uchar bn,dn,chn,houn=10。 uchar tt0,tt1,tt2,tt3,tt4,change,ho=10。 int tt5,a,an。 uchar pt。 //时钟说明 // // a b : c d // //// //闹钟说明 // // an bn : dn // //// void delay(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 } void wc(uchar ) { rs=0。 P0=。 delay(5)。 en=1。 delay(5)。 en=0。 } void wd(uchar date) { rs=1。 P0=date。 单片机课程设计报告 15 delay(5)。 en=1。 delay(5)。 en=0。 } void init() { en=0。 rs=0。 rw=0。 //写数据或指令时,的口必须为低电平 wc(0x38)。 wc(0x0c)。 wc(0x06)。 //写一个字符后地址指针加 wc(0x01)。 } void showtime(uchar fen_1,uchar fen_2,uchar f1,uchar f2) { wc(fen_1)。 delay(1)。 wd(shuzi[f1])。 delay(1)。 wc(fen_2)。 delay(1)。 wd(shuzi[f2])。 delay(1)。 } void showmao(uchar kkkkk) { if(kkkkk==0) { wc(0x87)。 delay(1)。 wd(0x3a)。 delay(1)。 } else if(kkkkk==1) { wc(0xcd)。 delay(1)。 wd(0x3a)。 delay(1)。 } else { wc(0xcd)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。