ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:240.78KB ,
资源ID:9853449      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9853449.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计实验报告LCD电子时钟.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计实验报告LCD电子时钟.docx

1、单片机课程设计实验报告LCD电子时钟单片机原理与应用课程名称: 单片机原理与应用 设计题目: 电子钟 院 系: 电子信息工程学院 班 级: 自动化 设 计 者: 全宏宇 指导教师: 一,设计目标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。 温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD 上,通过温度数据处理便可实现温度控制器功能。 除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、复位电路、晶振电路等。 本次LCD电子钟实验用到其中的蜂鸣器,按键,LCD显示接口。3,总体设计1)基本资源的使用本次实验采用了型单片机,液晶显示屏,蜂鸣器。为了实现时钟,定时,闹钟,秒表的功能,用到了单片机的外部中断,计时器中断,及端口资源功能外部中断外部中断INT1

4、模式选择(时钟,调时,秒表,闹钟)外部中断INT0 秒表的暂停,清零定时器定时器T0 秒表,时钟定时基准定时器T1 音乐闹铃的音符产生I/O端口P1,P2 LCD接口,蜂鸣器2)软件仿真(1)程序设计的一些关键问题(具体参照后面的程序清单)建立Keil工程时,注意对程序编译环境进行设置;设置内容包括器件,频率,产生文件等。 LCD管脚及控制字;LCD管脚的定义控制字1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移

5、,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。指令4:显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示5X7的点阵字符,高电平时显示5X10的显示字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址

6、BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。 LCD实现滚动显示;方法一:采用控制命令,显示后画面移动一个字符;方法二:循环使用显示不同位置,形成滚动效果。秒表主要是产生计时基准.秒,有了基准之后需要解决的问题是如何实现有效的暂停,清零(达到精准动作),采用中断是很不错的结果。闹铃主要是如何实现闹铃关闭的逻辑,if(f&g)语句可以实现这一动作。提高计时精度 本程序除了调时模式外,其他模式的时候时钟都在跑动,提高了因模式转换而导致的时间精度降低。(2)Proteus仿真在Proteus中画出如下电路图,添加文件,进行虚拟仿真。2)开发板运行调试在板上烧制程序

7、,根据实际的效果,对中断的反应时间,显示效果做出了调整,整体效果不错,只是音乐的效果不佳,主要是由于如果将蜂鸣器换成扬声器效果会好些,还可以在程序中增加节拍来增加音乐效果。4,硬件制作根据仿真电路图购买元件进行焊接,下载程序效果后,液晶显示器显示乱码,检查电路后已无连接错误,但功能依然没有实现,相关检查在进行中。三,设计体会本次课程设计系统地学习了单片编程开发及实际电路的制作。学习了的语言编程的基本知识,Proteus仿真软件的模拟仿真,开发实验板的使用,本次课设,时间了较多的其他案例,比较全面的掌握了单片机的运营,包括编程,电路,器件等,在知识上有了很多的长进。本次课程设计还有很多其他收获,

8、锻炼了自学的能力,特别是动手实践方面的东西,让我深深感受到理论与实际的差距,实际当中会有一些小的问题,这些问题是意想不到的,需要去思考,去解决,这是很锻炼人的。四,程序#include#include#define uchar unsigned char#define ulong unsigned long#define uint unsigned intuchar idata welcome16= clock ; /定义第一行显示数组uchar idata lwelcome16= clock ; /定义第一行显示数组uchar idata llwelcome16= clock ; /定义第一

9、行显示数组uchar idata lllwelcome16= clock ; /定义第一行显示数组uchar idata sslcdtimer16= 00:00:00 ;uchar idata tsslcdtimer16= 00:00:00 ;uchar idata lcdtimer16= 00:00:00 ; /定义第二行显示数组uchar idata mlcdtimer16= 00: : ; /定义第二行显示数组uchar idata hlcdtimer16= :00: ; /定义第二行显示数组uchar idata setlcdtimer16= 00:01:00 ;uchar timec

10、ount;uchar temps;bit timeflag;bit sstimeflag;sbit ring=P20;/蜂鸣闹铃 sbit e=P27;/显示器 sbit rw=P26;/显示器sbit rs=P25;/显示器 sbit P10=P10; /测试用闪灯 sbit Key=P32;/秒表暂停,清零sbit Key0=P33;/调时,设定闹钟时间,秒表选择sbit Key1=P34;/调时,设定闹钟时间改变uchar th1_f; /在中断中装载的T0的值高8位uchar tl1_f; /在中断中装载的T0的值低8位uint m=0;uint n=0;ulong i;uint f=

11、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,0xEE, 0xFD,0x44, 0xFD,0x6D, 0xFD,0xB4, 0xFD,0xF4, 0xFE,0x2D, ; /音乐频率表,低音,中音,高音,系统振荡频率11.0592M

12、Hzuint 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,22,21,16,21,15; /编制音乐 /*/软件延时函数(系统晶振为11.0592MHz),延时时间约为40s/入口条件:无符号整型变量del1,最终的延时时间为(del1*40)

13、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; /*/向液晶显示器写命令函数/*void WR_Com(uchar temp) busy(); rs=0; rw=0; P0=temp; e=1; e=0;/*/向液晶显示器写数据函数/*void WR_Data(u

14、char 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 addr,uchar *temp1) uchar i; WR_Com(addr); delay(100); for(i=0;i0;i-) P0=0x30; rs=0; rw=

15、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 delay(10000); n+; if(n=3) n=0; /*/外部中断函数,模式选择/*void modepp() interrupt

16、2 using 1 delay(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; /取反音乐输出IO

17、 /*/主函数/*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) sslcdtimer7=0x30; disp_lcd(0xc0,sslcdtimer); if(n=1)/秒表暂停 dis

18、p_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(lcdtimer8=0x3a) lcdtimer8=0x30; lcdtimer7+=1;

19、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&lcdtimer5=setlcdtimer5&lcdtimer4=setlcdtimer4) f=1; /开启闹钟 ,播放音乐 if(f&g) /*ring=1; delay(10000); ring=0; f=0; */ IE=0x8e; j=song1i/10-1; k=2*(song1i%10-1); th1_f=freqjk; /取出对应的定时值送给T0 tl1_f=freqj+k; TR1=1; for(n=0;n=0x3a) lcdtimer8=0x30; lcdtimer7+=1; if(lcdtimer7=0x36) lcdtim

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1