




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理与应用课程名称:单片机原理与应用设计题目:LCD电子钟院系:电子信息工程学院班级:自动化0 7 0 6设计者:全宏宇指导教师:一,设计目标LCD显示电子钟的基本功能1 ,实现时钟功能;2,实现闹铃功能;3,实现秒表功能;4,具有一定的计时精度。LCD显示电子钟的基本要求1, ,掌握单片机开发编程设计的基本流程;2, 了解Keil及Proteus软件的基本使用;3, 了解LCD的基本使用;4,学习单片机硬件制作。二,具体实现1,软件平台1) Keil编程Keil的开发工具的使用的基本过程:创建C或汇编语言的源程序;编译或汇编源文件;Q)纠正源文件中的错误;从编译器和汇编器连接目标文件;
2、(5测试连接的应用程序。2) Proteus 仿真Proteus软件不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。在编译方面,它也支持IAR , Keil , PLAB等多种编译器。2,硬件开发平台JD51开发板的基本资料C1 LED电路,8只独立LED发光管,可做指示或各种闪烁效果用。C2数码管电路,4只共阳一体8段数码显示管,可实现各种数据显示,如计数、时钟等。C3蜂鸣器电路,可用于设计各种提示音、演奏音乐等。键盘电路,学习按键控制相关编程。0 LCD显示电路,编程控制 LCD显示。C6串口电路,学习编程实现JD51和PC或其他符
3、合该通信协议的电路之间的通信。7红外电路,通过选配的红外遥控器,学习红外解码并可实现红外遥控JD51。C8温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD上,通过温度数据处理便可实现温度控制器功能。C9除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、复位电路、晶振 电路等。本次LCD电子钟实验用到其中的蜂鸣器,按键,LCD显示接口。3,总体设计1)基本资源的使用本次实验采用了 8 9c 5 2型单片机,1 6 0 2 L C D液晶显示屏,蜂鸣器。为了实现时钟,定时,闹钟,秒表的功能,用到了单片机的外部中断,计时器中断,及 I /O端口.资源
4、功能外部中断外部中断INT1模式选择(时钟,调时,秒表,闹钟)外部中断INT0秒表的暂停,清零定时器定时器T0秒表,时钟定时基准定时器T1音乐闹铃的音符产生I/O 端口P1, P2LCD接口,蜂鸣器2)软件仿真(1)程序设计的一些关键问题(具体参照后面的程序清单)0建立Keil工程时,注意对程序编译环境进行设置;设置内容包括器件,频率,产生h e x文件等。0 LCD管脚及控制字;LCD管脚的定义控制字1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。指令1:清显示,指令码 01H,光标复位到地址 00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示位置设置I
5、/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。指令4:显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位S/C :高电平时显示移动的文字,低电平时移动光标指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示 5X7的点阵字符,高电平时显示5X10的显示字符。指令7:字符发生器RAM 地址设置。指令8: DDR
6、AM 地址设置。指令9:读忙信号和光标地址BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。(3 LCD实现滚动显示;方法一:采用LCD 1 6 0 2控制命令,显示后画面移动一个字符; 方法二:循环使用显示不同位置,形成滚动效果。CD秒表主要是产生计时基准0.0 1秒,有了基准之后需要解决的问题是如何实现有效的暂停,清零(达到精准动作),采用中断是很不错的结果。闹铃主要是如何实现闹铃关闭的逻辑,if(f&g) 语句可以实现这一动作。C7提高计时精度本程序除了调时模式外,其他模式的时候时钟都在跑动,提高了因模式转换而导致的时间精度降低。( 2 ) Proteus
7、仿真在Proteus中画出如下电路图,添加h e x文件,进行虚拟仿真。2) 开发板运行调试在JD5 1板上烧制程序,根据实际的效果,对中断的反应时间,显示效果做出了调整,整体效果不错,只是音乐的效果不佳,主要是由于如果将蜂鸣器换成扬声器效果会好些,还可以在程序中增加节拍来 增加音乐效果。4,硬件制作根据仿真电路图购买元件进行焊接,下载程序效果后,液晶显示器显示乱码,检查电路后已无连接错 误,但功能依然没有实现,相关检查在进行中。三,设计体会本次课程设计系统地学习了单片编程开发及实际电路的制作。学习了Ke i 1的C语言编程的基本知 识,Proteus仿真软件的模拟仿真,JD5 1开发实验板的
8、使用,本次课设,时间了较多的其他案例,比较 全面的掌握了单片机的运营,包括编程,电路,LCD器件等,在知识上有了很多的长进。本次课程设计还有很多其他收获,锻炼了自学的能力,特别是动手实践方面的东西,让我深深感受到理论与实际的差距,实际当中会有一些小的问题,这些问题是意想不到的,需要去思考,去解决,这是很锻 炼人的。 四,程序#include#include#define uchar unsigned char#define ulong unsigned long#define uint unsigned intuchar idatawelcome16=clock;/ 定义第一行显示数组ucha
9、r idatalwelcome16=clock;/ 定义第一行显示数组一行显示数组uchar idatallwelcome16=clock ;/ 定义第一行显示数组一行显示数组uchar idatalllwelcome16=clock ;/ 定义第一行显示数组一行显示数组uchar idatasslcdtimer16=00:00:00;uchar idata tsslcdtimer16=00:00:00;uchar idatalcdtimer16=00:00:00;/ 定义第二行显示数组uchar idatamlcdtimer16=00: :;/ 定义第二行显示数组uchar idatahlc
10、dtimer16=:00:;/ 定义第二行显示数组uchar idatasetlcdtimer16=00:01:00;uchar timecount;uchar temps;bit timeflag;bit sstimeflag;sbit ring=P2A0;/ 蜂鸣闹铃sbit e=P2A7;/ LCD显示器Esbit rw=P2A6;/ LCD 显示器RWsbit rs=P2A5;/ L C D 显示器 R Ssbit P10=P1A0; / 测试用闪灯sbit Key=P3A2;/ 秒表暂停,清零sbit Key0=P3A3;/ 调时,设定闹钟时间,秒表选择sbit Key1=P3A4;
11、/ 调时,设定闹钟时间改变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,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
12、,0xEE,0xFD,0x44,11.0592MHz0xFD,0x6D, 0xFD,0xB4, 0xFD,0xF4, 0xFE,0x2D, ;/ 音乐频率表,低音,中音,高音,系统振荡频率uint code song1=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,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,
13、22,21,16,21,15;/ 编制音乐/* /软件延时函数(系统晶振为 11.0592MHz),延时时间约为 40 as/入口条件:无符号整型变量dell ,最终的延时时间为(del1*40 ) s/* void delay(uint del1) uchar del2;for(;del10;del1-)for(del2=10;del20;del2-);/* / 液晶显示器判忙函数/* void busy() uchar temp; temp=0x00; rs=0;rw=1;while(temp&0x80)=0x80) P0=0xff;e=1;temp=P0;e=0;/* / 向液晶显示器写
14、命令函数/* 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=1;e=0;/*/ 向液晶显示器写入显示数据函数/ 入口条件:液晶显示器行首地址(指示第一行还是第二行)和待显示数组的首地址/* /void disp_lcdchar(uchar addr,uchar temp1)/WR_Com(addr);delay(100);WR_Data(temp1);/void disp_lcd(uchar
15、addr,uchar *temp1) uchar i;WR_Com(addr); delay(100);for(i=0;i0;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 0
16、delay(10000);n+;if(n=3) n=0;/* / 外部中断函数,模式选择/* void modepp() interrupt 2 using 1 delay(30000);m+;if(m=6)n=0;if(m=7) m=0;/*/ 定时 /计数器中断函数,1S 及 0.01S /* void timer0() interrupt 1 using 2TH0=0xdc;TL0=0x23;sstimeflag=1;if(-timecount=0)timecount=100;timeflag=1;*/ 定时 /计数器中断函数,装入音乐频率计数初值/* void timer1() int
17、errupt 3 using 3 TL1=tl1_f;TH0=th1_f; / 调入预定时值ring=!ring; / 取反音乐输出IO /* / 主函数/* void main()P10=1;lcd_ini();lcd_Reset();/*for(i=0;i=0x3a) sslcdtimer11=0x30;sslcdtimer10+=1;if(sslcdtimer10=0x3a) sslcdtimer10=0x30;sslcdtimer8+=1;if(sslcdtimer8=0x3a)sslcdtimer8=0x30;sslcdtimer7+=1;if(sslcdtimer7=0x36) s
18、slcdtimer7=0x30;disp_lcd(0xc0,sslcdtimer);if(n=1)/ 秒表暂停disp_lcd(0xc0,sslcdtimer);if(n=2)/ 秒表清零disp_lcd(0xc0,tsslcdtimer);for(i=0;i=3) / 时钟程序,只要不是调时,就一直运行IE=0x86;if(timeflag=1)timeflag=0;lcdtimer11+=1;if(lcdtimer11=0x3a)lcdtimer11=0x30;lcdtimer10+=1;if(lcdtimer10=0x36)lcdtimer10=0x30;lcdtimer8+=1;if(
19、lcdtimer8=0x3a)lcdtimer8=0x30;lcdtimer7+=1;if(lcdtimer7=0x36)lcdtimer7=0x30;lcdtimer5+=1;if(lcdtimer5=0x3a)lcdtimer5=0x30;lcdtimer4+=1;if(lcdtimer4=0x33&lcdtimer5=0x35)lcdtimer5=0x30;lcdtimer4=0x30;if(m=0)disp_lcd(0xc0,lcdtimer);if(!Key1)/ 关掉闹钟g=0;if(lcdtimer8=setlcdtimer8&lcdtimer7=setlcdtimer7&lcd
20、timer5=setlcdtimer5&lcdtimer4=setl cdtimer4)f=1; / 开启闹钟,播放音乐if(f&g)/*ring=1;delay(10000);ring=0;f=0; */IE=0x8e;j=song1i/10-1;k=2*(song1i%10-1);T0th1_f=freqjk; / 取出对应的定时值送给tl1_f=freqj+k;TR1=1;for(n=0;n=0x3a)lcdtimer8=0x30;lcdtimer7+=1;if(lcdtimer7=0x36)lcdtimer7=0x30;disp_lcd(0xc0,lcdtimer);delay(800
21、0);mlcdtimer11=lcdtimer11;mlcdtimer10=lcdtimer10;mlcdtimer5=lcdtimer5;mlcdtimer4=lcdtimer4;disp_lcd(0xc0,mlcdtimer);while(m=2) / 调时时if(!Key1)delay(10000);lcdtimer5+=1;if(lcdtimer5=0x3a)lcdtimer5=0x30;lcdtimer4+=1;if(lcdtimer4=0x32&lcdtimer5=0x34) lcdtimer5=0x30;lcdtimer4=0x30;disp_lcd(0xc0,lcdtimer);delay(8000);hlcdtimer11=lcdtimer11;hlcdtimer10=lcdtimer10;hlcdtimer8=lcdtimer8;hlcdtimer7=lcdtimer7;disp_lcd(0xc0,hlcdtimer);while(m=3)/ 显示闹铃时间
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纳米材料在生物医学的应用
- 男病人会阴护理规范
- 项目劳务合同协议书
- 餐饮合作加盟协议书
- 公司签落户承诺协议书
- 装修公司结款协议书
- 供货散装酒合同协议书
- 车辆后期维护协议书
- 高层干部聘用协议书
- 足浴技师底薪协议书
- 中医药进校园
- 2024年福建泉州惠安县互联网网格员招考聘用(高频重点复习提升训练)共500题附带答案详解
- 医院污水处理培训教学
- 机务维修作风课件讲解
- 垃圾清运服务投标方案技术方案
- 店长入股门店合同范本
- 湖北省武汉市汉阳区2023-2024学年七年级下学期期末数学试题
- 2024年大学生西部计划志愿者招募笔试题库(供参考)
- 安全技术交底记录(工人入场)
- 医疗器械质量体系迎审
- 马拉松赛事运营服务方案
评论
0/150
提交评论