版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理与应用课程名称:单片机原理与应用设计题目:LCD电子钟院系:电子信息工程学院班级:自动化0706设计者:全宏宇指导教师:一,设计目标LCD显示电子钟的基本功能1, 实现时钟功能;2, 实现闹铃功能;3, 实现秒表功能;4, 具有一定的计时精度。LCD显示电子钟的基本要求1,掌握单片机开发编程设计的基本流程;2, 了解Keil及Proteus软件的基本使用;3,了解 LCD 的基本使用;4,学习单片机硬件制作。二,具体实现1,软件平台1) Keil 编程Keil 的开发工具的使用的基本过程:®创建C或汇编语言的源程序; 编译或汇编源文件; 纠正源文件中的错误;从编译器和汇编器
2、连接目标文件;©测试连接的应用程序。2) Proteus 仿真Proteus 软件不仅具有其它 EDA 工具软件的仿真功能, 还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。在编译方面,它也支持IAR, Keil,PLAB 等多种编译器。2,硬件开发平台JD51开发板的基本资料 LED电路,8只独立LED发光管,可做指示或各种闪烁效果用。 数码管电路,4只共阳一体8段数码显示管,可实现各种数据显示,如计数、时钟等。 蜂鸣器电路,可用于设计各种提示音、演奏音乐等。 键盘电路,学习按键控制相关编程。® LCD显示电路,编程控制LCD显示。©串口电路
3、,学习编程实现JD51和PC或其他符合该通信协议的电路之间的通信。红外电路,通过选配的红外遥控器,学习红外解码并可实现红外遥控JD51。©8 温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD上,通过温度数据处理便可实现温度控制器功能。9 除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、 复位电路、晶振电路等。本次 LCD 电子钟实验用到其中的蜂鸣器,按键, LCD 显示接口。3,总体设计1)基本资源的使用本次实验采用了 8 9C52型单片机,1 6 0 2 LCD液晶显示屏,蜂鸣器。为 了实现时钟,定时,闹钟,秒表的功能,用到了单片
4、机的外部中断,计时器中断, 及I/O 端口.资源功能外部中断外部中断INT1模式选择(时钟,调时秒表,闹钟)外部中断INTO秒表的暂停,清零定时器定时器TO秒表,时钟定时基准定时器T1音乐闹铃的音符产生I/O 端口P1,P2LCD接口,蜂鸣器2)软件仿真(1)程序设计的一些关键问题(具体参照后面的程序清单) 建立Keil工程时,注意对程序编译环境进行设置; 设置内容包括器件,频率,产生hex文件等。 LCD管脚及控制字;LCD管脚的定义控制字1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。指令1清显示,指令码01H,光标复位到地址00H位置指令 2:光标复位,光标返回到地
5、址 00H指令3:光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。指令4:显示开关控制。D :控制整体的显示开与关,高电平表示开显示,低电平表示关 显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令 5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标指令6:功能设置命令 DL :高电平时为4位总线,低电平时为8位总线N :低电平时 为单行显示,高电平时为双行显示,F:低电平时显示5X7的点阵字符,高电平时显示 5X10的显示字符。
6、指令 7:字符发生器 RAM 地址设置。指令 8: DDRAM 地址设置。指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙©LCD实现滚动显示;方法一:采用LCD 1 6 0 2控制命令,显示后画面移动一个字符;方法二:循环使用显示不同位置,形成滚动效果。©5 秒表主要是产生计时基准0 .01秒,有了基准之后需要解决的问题是如何实现有效的暂停,清零(达到精准动作) ,采用中断是很不错的结果。©6 闹铃主要是如何实现闹铃关闭的逻辑, if(f&&g) 语句可以实现这一动作。©7 提高
7、计时精度本程序除了调时模式外,其他模式的时候时钟都在跑动,提高了因模式转换而导致的时 间精度降低。(2) Proteus仿真在Proteus中画出如下电路图,添加hex文件,进行虚拟仿真。2) 开 发板运行调试在JD5 1板上烧制程序,根据实际的效果,对中断的反应时间,显示效果做出了调整,整体效果不错,只是音乐的效果不佳,主要是由于如果将蜂鸣器换成扬声器效果会好 些,还可以在程序中增加节拍来增加音乐效果4,硬件制作根据仿真电路图购买元件进行焊接,下载程序效果后,液晶显示器显示乱码,检查电 路后已无连接错误,但功能依然没有实现,相关检查在进行中。三,设计体会本次课程设计系统地学习了单片编程开发及
8、实际电路的制作。学习了Kei1的C语言 编程的基本知识,Proteus仿真软件的模拟仿真,JD5 1开发实验板的使用,本次课设, 时间了较多的其他案例,比较全面的掌握了单片机的运营,包括编程,电路,LCD器件 等,在知识上有了很多的长进。本次课程设计还有很多其他收获,锻炼了自学的能力,特别是动手实践方面的东西,让 我深深感受到理论与实际的差距,实际当中会有一些小的问题,这些问题是意想不到的, 需要去思考,去解决,这是很锻炼人的。四,程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#defi
9、ne ulong unsigned long #define uint unsigned intuchar idatawelcome16="clock "/定义第一行显示数组uchar idatalwelcome16="clock "/定义第一行显示数组uchar idatallwelcome16="clock "/定义第一行显示数组uchar idatalllwelcome16="clock "/ 定义第一行显示数组ucharidatasslcdtimer16="00:00:00 "uchar
10、idata tsslcdtimer16="00:00:00 "ucharidatalcdtimer16="00:00:00 "/定义第二行显示数组ucharidatamlcdtimer16="00: : "/定义第二行显示数组ucharidatahlcdtimer16=":00: "/定义第二行显示数组00:01:00 "uchar idata setlcdtimer16=" uchar timecount;uchar temps;bit timeflag;bit sstimeflag;sbit
11、 ring=P2A0;/ 蜂鸣闹铃 sbit e=P2A7;/ LCD显示器Esbit rw=P2A6; LCD 显示器RWsbit rs=P2A5; LCD显示器RSsbit P10=P1A0; /测试用闪灯sbit Key=P3A2;/ 秒表暂停,清零sbit Key0=P3A3;/ 调时,设定闹钟时间,秒表选择sbit Key1=P3A4;/ 调时,设定闹钟时间改变uchar th1_f; / 在中断中装载的 T0 的值高 8 位 uchar tl1_f; / 在中断中装载的 T0 的值低 8 位 uint m=0;uint n=0;ulong i;uint f=0,g=1;uint j
12、,k;uchar code freq314=0xF2,0x42,0xF3,0xC1,0xF5,0x17,0xF5,0xB6,0xF6,0xD0,0xF7,0xD1,0xF8,0xB6,0xF9,0x21,0xF9,0xE0,0xFA,0x8B,0xFA,0xD7,0xFB,0x68,0xFB,0xE8,0xFC,0x5B ,0xFC,0x8D,0xFC,0xEE,0xFD,0x44,0xFD,0x6D,0xFD,0xB4,0xFD,0xF4,0xFE,0x2D,; / 音乐频率表,低音,中音,高音,系统振荡频率 11.0592MHz uint code song1=26,25,23,25,31
13、,26,25,26,23,25,26,25,23,22,21,16,25,23,22,22,23,23,23,26,23,22,21,25,23,22,2 1,16,21,15,26,25,23,25,31,26,25,26,23,25,26,25,23,22,21,16,25,23,22,22,23,23,23,26,23,22,21,25,23,22, 21,16,21,15;/ 编制音乐/软件延时函数(系统晶振为11.O592MH0,延时时间约为40 Q/入口条件:无符号整型变量 dell,最终的延时时间为(del1*40)ps* void delay(uint del1)uchar d
14、el2;for(;del1>0;del1-) for(del2=10;del2>0;del2-);/*/ 液晶显示器判忙函数/*void busy()uchar temp;temp=0x00;rs=0;rw=1;while(temp&0x80)=0x80)P0=0xff;e=1;temp=P0;e=0;/*/ 向液晶显示器写命令函数/*void WR_Com(uchar temp)busy();rs=0;rw=0;P0=temp;e=1;e=0;/*/ 向液晶显示器写数据函数/*void WR_Data(uchar num)busy();rs=1;rw=0;P0=num;e
15、=1;e=0;/*/ 向液晶显示器写入显示数据函数/ 入口条件:液晶显示器行首地址(指示第一行还是第二行)和待显示数组的首地址/*/void disp_lcdchar(uchar addr,uchar temp1)/ WR_Com(addr);/ delay(100);/ WR_Data(temp1);/void disp_lcd(uchar addr,uchar *temp1)uchar i;WR_Com(addr);delay(100);for(i=0;i<16;i+)WR_Data(temp1i);delay(100);/*/ 液晶显示器初始化函数/*void lcd_ini()c
16、har i;for(i=3;i>0;i-)P0=0x30;rs=0;rw=0;e=1;e=0;delay(100);P0=0x38;rs=0;rw=0;e=1;e=0;delay(100);/*/ 液晶显示器复位函数/*void lcd_Reset()WR_Com(0x01);delay(100);WR_Com(0x06);delay(100);WR_Com(0x0c);delay(100);/ 外部中断函数,秒表暂停,清零* void modess() interrupt 0 using 0delay(10000);n+;if(n=3)n=0;/* / 外部中断函数,模式选择/* vo
17、id modepp() interrupt 2 using 1delay(30000);m+;if(m=6)n=0;if(m=7)m=0;/*/定时/计数器中断函数,1S及0.01S/*void timer0() interrupt 1 using 2 TH0=0xdc;TL0=0x23;sstimeflag=1;if(-timecount=0)timecount=100;timeflag=1;/ 定时/ 计数器中断函数,装入音乐频率计数初值void timer1() interrupt 3 using 3 TL1=tl1_f;TH0=th1_f; / 调入预定时值 ring=!ring; /
18、 取反音乐输出 IO/* / 主函数*void main()P10=1;lcd_ini();lcd_Reset();/* for(i=0;i<10;i+)temps=welcomei;disp_lcdchar(0x80+1,temps); /LCD 单字符从左到右显示delay(10000);*/disp_lcd(0x80,welcome);delay(10000);disp_lcd(0x80,lwelcome);delay(10000);disp_lcd(0x80,llwelcome);delay(10000);disp_lcd(0x80,lllwelcome);delay(10000
19、);disp_lcd(0x80,llwelcome);delay(10000);disp_lcd(0x80,lwelcome);delay(10000);滚动显示disp_lcd(0x80,welcome); /LCDdelay(10000);disp_lcd(0xc0,lcdtimer);P10=0;TMOD=0x11;TH0=0xdc;TL0=0x23;TR0=1;IE=0x86;timeflag=0; /1 秒计时标志 sstimeflag=0; /0.01 秒计时标志 timecount=100;while(1)while(m=6)/ 秒表IE=0x87;if(n=0) / 秒表跑动i
20、f(sstimeflag=1)sstimeflag=0;sslcdtimer11+=1;if(sslcdtimer11>=0x3a)sslcdtimer11=0x30;sslcdtimer10+=1;if(sslcdtimer10>=0x3a)sslcdtimer10=0x30;sslcdtimer8+=1;if(sslcdtimer8>=0x3a)sslcdtimer8=0x30;sslcdtimer7+=1;disp_lcd(0xc0,sslcdtimer);if(n=1)/ 秒表暂停disp_lcd(0xc0,sslcdtimer);if(n>=2)/ 秒表清零w
21、hile(m=0|m>=3) / 时钟程序,只要不是调时,就一直运行IE=0x86;if(timeflag=1)timeflag=0;lcdtimer11+=1;if(lcdtimer11>=0x3a)lcdtimer10=0x30;lcdtimer8+=1;if(lcdtimer8>=0x3a)lcdtimer8=0x30;lcdtimer7+=1;if(lcdtimer7>=0x36)lcdtimer7=0x30;lcdtimer5+=1;if(lcdtimer5>=0x3a) lcdtimer4+=1;if(lcdtimer4>=0x33&&a
22、mp;lcdtimer5>=0x35)lcdtimer5=0x30;lcdtimer4=0x30;if(m=0)disp_lcd(0xc0,lcdtimer);if(!Key1)/ 关掉闹钟g=0;if(lcdtimer8=setlcdtimer8&&lcdtimer7=setlcdtimer7&&lcdtimer5=setlcdtimer5&&lcdt imer4=setlcdtimer4)f=1; / 开启闹钟 ,播放音乐if(f&&g)/*ring=1;delay(10000);ring=0;f=0; */IE=0x8
23、e;j=song1i/10-1;k=2*(song1i%10-1);th1_f=freqjk; / 取出对应的定时 值送给 T0tl1_f=freqj+k;TR1=1;for(n=0;n<50000;n+); / 音符间延时 i+;TR1=0;f=0;while(m=1) / 调时分if(!Key1)delay(10000);timeflag=0;lcdtimer8+=1;if(lcdtimer8>=0x3a)lcdtimer8=0x30;lcdtimer7+=1;if(lcdtimer7>=0x36) lcdtimer7=0x30;delay(8000);mlcdtimer11=lcdtimer11;mlcdtimer10=lcdtimer10;mlcdtimer5=lcdtimer5;mlcdtimer4=lcdtimer4;disp_lcd(0xc0,mlcdtimer);while(m=2) / 调时时if(!Key1)delay(10000);lcdtimer5+=1;if(lcdtimer5>=0x3a)if(lcdtimer4=0x32&&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版二手船舶买卖合同3篇
- 二零二四年度网络安全产品销售代理合同2篇
- 2024年城市基础设施建设项目补充合同
- 商场会员管理系统升级合同(2024版)4篇
- 2024年度饭店服务质量提升改善合同2篇
- 商铺经营管理委托与2024年度服务合同2篇
- 2024公司代持股合同协议
- 二零二四年度物业服务合同(完整版)2篇
- 二零二四年度租赁合同(含设备、场地)3篇
- 二零二四年度股权转让合同标的为公司股份的协议书2篇
- 北京市中小学生天文观测竞赛附有答案
- 初中生物知识竞赛试题(含答案)
- 2024年食品安全考试题库及答案
- 中职专业建设方案
- 一年级口算题卡10000道(100以内加减法)
- 歌剧魅影(全英文)课件
- 辉石矿选采项目社会稳定风险评估报告样本
- 服装材料考试试卷(含答案)
- 第十二章 血液系统疾病患儿的护理(一)课件
- 集团领导调研计划方案
- 机加工成本分析表标准模板
评论
0/150
提交评论