LCD液晶显示倒计时设计.docx
《LCD液晶显示倒计时设计.docx》由会员分享,可在线阅读,更多相关《LCD液晶显示倒计时设计.docx(25页珍藏版)》请在冰豆网上搜索。
LCD液晶显示倒计时设计
LCD液晶显示倒计时设计
长沙学院
《单片机原理及应用》
课程设计说明书
题目LCD12864液晶显示倒计时器系(部)
专业(班级)
姓名
学号
指导教师
起止日期
课程设计任务书
系(部):
电子与通信工程系专业:
课题名称LCD12864液晶显示倒计时器设计
1、课题内容:
设计基于单片机的LCD12864液晶显示倒计时器,要求如下:
(1)、LCD12864液晶显示倒计时时间。
(2)、倒计时过程中能设置5个闹钟,当倒计时值到设定值时驱动峰鸣
器演奏歌曲一首作为报警信号。
(3)、通过按键可以对倒计时设定初值。
倒计时初始值范围在24:
00:
设计00---00:
00:
60之间,用户可根据需要对其进行设置,设置成功后复位要求初始
值为成功设定值。
(4)、液晶显示屏的第一行显示“倒计时器”;第二行显示“倒计时时
间”;第三行显示最近一个闹钟的设定时间;第四行显示设置闹钟个数。
2、要求:
完成该系统的硬件和软件的设计,在Proteus软件上仿真通过,提交一
篇课程设计说明书。
1、汇编或C51语言程序设计;
2、调试程序;设计
工作3、在Protuse上进行仿真成功;
量4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程
序分析、仿真分析、调试过程,参考文献、设计总结等。
起止日期工作内容
第一天课题介绍,答疑,收集材料,C51介绍
第二天设计方案论证,练习编写C51程序工作
计划第三天~第六天程序设计
第六天~第八天程序调试、仿真
第九天~第十天系统测试并编写设计说明书
教研室意系(部)主管领导
见意见
年月日年月日
概述...................................................................................................................................................4
一、设计目的.....................................................................................................................................5
二、设计任务与要求..........................................................................................................................5
1、课题内容................................................................................................................................5
、要求.......................................................................................................................................52
三、设计原理...................................................................................................................................6
1、模块简介................................................................................................................................6
(1)单片机概述..............................................................................................................6
(2)LCD12864概述.............................................................................................................6
2、单片机最小系统电路............................................................................................................6
3、电路总图..............................................................................................................................7
4、软件设计思路.........................................................................................................................7
5、设计结果................................................................................................................................8
四、设计心得及体会..........................................................................................................................8参考文献............................................................................................................................................9
概述
近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
模拟多通道压力系统是利用压力传感器采集当前压力并反映在显示器上,它可以分析压力过量程,并发出报警。
并采用电子秤原理可根据输入单价准确的计算出物体的金额。
本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的四位LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
一、设计目的
1、加深对单片机的了解和运用,掌握单片机芯片80C5X系列的逻辑功能及使用方法,并且提高学生的
设计能力,以及提高综合运用所学知识的实际运用能力。
1、培养我们查阅数据手册的能力,以及提高我们对查阅资料的运用和理解。
2、通过设计的过程了解单片机的开发过程,以及对软件硬件设备的选择和应用。
3、学习并加深对Keil的运用,
4、熟悉模拟电路的应用与集成电路的引脚排列。
5、熟悉电路仿真软件Proteus的使用。
6、了解点阵型LCD12864(不带字库)的组成及工作原理。
7、熟悉KEIL软件的编程,加强C语言的能力,以及培养我们在编译遇到错误的检查与排查。
二、设计任务与要求
1、课题内容
设计基于单片机的LCD12864液晶显示倒计时器,要求如下:
(1)、LCD12864液晶显示倒计时时间。
(2)、倒计时过程中能设置5个闹钟,当倒计时值到设定值时驱动峰鸣器演奏歌曲一首作为报警信号。
(3)、通过按键可以对倒计时设定初值。
倒计时初始值范围在24:
00:
00---00:
00:
60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值。
(4)、液晶显示屏的第一行显示“倒计时器”;第二行显示“倒计时时间”;第三行显示最近一个闹钟的设定时间;第四行显示设置闹钟个数。
2、要求
(1)、汇编或C51语言程序设计;
(2)、调试程序;
(3)、在Protuse上进行仿真成功;
(4)、提交一份完整的课程设计说明书。
三、设计原理
1、模块简介
(1)单片机概述
单片机因将其主要组成部分集成在一个芯片上而得名,具体说就是把中央处理器CPU。
随机存储器RAM。
只读存储器ROM。
中断系统、定时器,计数器以及I\O接口电路等主要微型机部件集成在一个芯片上。
虽然单片机只是一个芯片,但从组成和功能上看,它已具有了计算机系统的属性。
为此,称它为单片微型计机SCMC,简称单片机单片机主要应用与控制领域,用以实现各种测试和控制功能,为了强调起控制属性,也可以把单片机称为微控制器MCU。
在国际上“微控制器”的叫法似乎更通用一些,而在我国则比较习惯与“单片机”这一名称。
单片机在应用时,通常是处于控制系统的核心地位并融入其中,即以嵌入的方式进行使用,为了强调其:
嵌入:
的特点,也常常将单片机称为嵌入式微控制器EMCU。
在单片机的电路和结构中,有许多嵌入式应用的特点。
(2)LCD12864概述
带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。
带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。
字符显示是通过将字符显示编码写入该字符显示RAM实现的。
根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。
三种不同字符/字型的选择编码范围为:
0000,0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H,7FH显示半宽ASCII码字符,A1A0H,F7FFH显示8192种GB2312中文字库字形。
字符显示RAM在液晶模块中的地址80H,9FH。
字符显示的RAM的地址与32个字符显示区域有着一一对应的关系2、单片机最小系统电路
单片机的最小系统有复位电路和振荡电路组成,复位电路采用上电复位,振荡电路采用的内部方式,在XTAL1和XTAL2端外界石英晶体作定时元件,内部反相放大器自激振荡,产生时钟。
P0口出外接4.7K上拉电阻,因为P0口是漏极开路,必须要接上拉才能输出高电平。
5V直流稳压电源电路如图3所示,该电路由电源变压器、整流桥堆、滤波电容C6、C7、三端稳压集成电路LM7805、限流电阻器和电源指示发光二极管组成。
工作原理及过程:
当接通电源,交流220V电压经变压器降压,整流桥堆整流,C6滤波及C7稳压,经三端稳压集成电路LM7805后,产生5V直流电压,作为单片机和LCD12864液晶的工作电源。
经限流电阻限流降压后将发光二极管点亮。
3、电路总图
图3.1.1
电路总图连接如图所示。
所有的管脚通过标好建立电气连接,由图可以看出LCD12864与单片机的数据通信是利用单片机的P0口,控制线连接到了单片机的P2口的前5个管脚,单片机通过这5个管脚与LCD12864通信,实现对LCD12864的控制
4、软件设计思路
本电路应用TIMER0MODE16位计数器的计时中断法。
1秒等于1000000微秒,而每一计时脉冲是1微秒,因此需输入100000个计时脉冲,方可达到1秒的时间。
由于16位计数器初值为0000H,需65536个计时脉冲方可发生溢出,现在需1000000个脉冲,则溢出次数达15.258次(1000000\65536=15.258次)。
由上式得知实际应溢出16次,即:
1000000=65536*15+1696065536-16960=48576=BDC0H由上式得知1000000个脉冲,首先需设定TL0=C0H,TH0=BDH,此时第1次只要输入16960个脉冲输入,就会溢出;第2次至第16次,则需每65536个计时脉冲,方才发生溢出。
共计输入16960+65536*15=1000000
个计时脉冲。
上电时从1分钟开始倒计时,倒计时的时间可以通过矩阵键盘设置。
倒计时过程中可以设置五个闹钟响铃,也是听过矩阵键盘模块进行设置。
每开启一个闹钟对应的发光二极管就会亮。
当到达闹铃时间蜂鸣器就会报警。
5、设计结果
图3.5.1
结果显示四行,第一行为标题“倒计时器”,第二行为倒计时器时间显示,其中时间可以任意设置,第三行为闹钟时间显示,也是可以任意设置,第三行显示闹钟个数,一共可以设置五个闹钟。
四、设计心得及体会
程序设计采用的是C语言来编写,并且利用Keil的强大功能的支持显得C语言简洁高效,并且我们可以在同一个工程中建立多个C文件来共同完成我们的设计。
尽管C语言的编写的高效性,但是在程序编写的时候,还是会出现各种问题,比如我们在同一个工程中建立多个C文件来完成该功能就会经常出现重复定义和未定义的错误,但是这个就需要我们有足够的经验才能解决,所我我们也学会了怎么又耐心的去检查错误和排除错误。
在编写C语言的时候我们也要注意一些定义,我们经常就在C语言中定义全局变量和局部变量。
要真正写好一共程序是不容易的需要严谨的思维,还要有耐心检查错误的心态。
单片机课程设计,是对单片机知识的验证,对C语言的了解又进一步的加深和巩固,还可以帮助我们理解巩固所学知识,激发我们对单片机课程的兴趣,更锻炼了我们独立思考、开拓创新的能力。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
其次,这次课程设计让我充分认识到合作的重要性,只有合作才能保证整个项目的有条不絮。
在设计过程中,非常感谢同学们的指导,才使设计进展的比较顺利。
另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我的设计以极大的帮助,使我获益匪浅。
因此非常感谢张晓虎老师的教导。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
这次课程设计中我的动手能力得到了极大的提高,我们也对自己所学的东西有了进一步的了解,但我感觉到我们在动手中还是缺乏一些理论知识,因此我们还要加大对理论知识的理解,同时也了解到任何设计都是基于理论之上的,纸上谈兵是没有用的。
本设计是老师的指导下完成的,在此向他致以最衷心的感谢。
在两年多的共同学习中,我与同学建立深厚的友谊,他们在我遇到困难时无私伸出援助之手,对他们的帮助我特别感谢。
参考文献
【1】XX文库
【2】曾屹、彭楚武。
单片机原理与应用。
中南大学出版社,2009
程序如下:
#include
#include
#defineLCD_dataP0//数据口
sbitLCD_RS=P2^0;//寄存器选择输入
sbitLCD_RW=P2^1;//液晶读/写控制
sbitLCD_EN=P2^2;//液晶使能控制
sbitLCD_PSB=P2^3;//串/并方式控制
sbitLCD_RST=P2^5;//液晶复位端口
/*矩阵键盘接口及相关功能对应键值宏定义*/
#defineKEY_PORTP1
#defineKEY_NONE0
#defineKEY_SET_ALARM19
#defineKEY_SET_ALARM210
#defineKEY_SET_ALARM311
#defineKEY_SET_ALARM45
#defineKEY_SET_ALARM56
#defineKEY_SET_TIME14
#defineKEY_SAVE_ALARM15
#defineKEY_DEL_ALARM13
#defineKEY_UP16
#defineKEY_DOWN12
#defineKEY_LEFT4
#defineKEY_RIGHT8
voidDisplay_Init(void)
{
LCD_Cls();/*清屏*/
LCD_PutHZ(0,4,codeHZ[0]);/*倒*/
LCD_PutHZ(0,6,codeHZ[1]);/*计*/
LCD_PutHZ(0,8,codeHZ[2]);/*时*/
LCD_PutHZ(0,10,codeHZ[3]);/*器*/
LCD_PutHZ(1,0,codeHZ[0]);/*倒*/
LCD_PutHZ(1,2,codeHZ[1]);/*计*/
LCD_PutHZ(1,4,codeHZ[2]);/*时*/
LCD_PutChar(1,6,codeDigit[10],CURSUR_OFF);/*:
*/
LCD_PutChar(1,10,codeDigit[10],CURSUR_OFF);/*:
*/
LCD_PutChar(1,13,codeDigit[10],CURSUR_OFF);/*:
*/
Display_Time(1,8,time[HOUR],time[MINUTE],time[SECOND],CURSUR_OFF);/*倒计时时间*/
LCD_PutHZ(2,0,codeHZ[4]);/*闹*/
LCD_PutHZ(2,4,codeHZ[5]);/*钟*/
LCD_PutChar(2,6,codeDigit[10],CURSUR_OFF);/*:
*/
LCD_PutChar(2,10,codeDigit[10],CURSUR_OFF);/*:
*/
LCD_PutChar(2,13,codeDigit[10],CURSUR_OFF);/*:
*/
Display_Time(2,8,alarm[0][HOUR],alarm[0][MINUTE],alarm[0][SECOND],CURSUR_OFF);/*闹
钟时间*/
LCD_PutHZ(3,0,codeHZ[4]);/*闹*/
LCD_PutHZ(3,2,codeHZ[5]);/*钟*/
LCD_PutHZ(3,4,codeHZ[6]);/*个*/
LCD_PutHZ(3,6,codeHZ[7]);/*数*/
LCD_PutChar(3,8,codeDigit[10],CURSUR_OFF);/*:
*/
Display_2Num(3,11,alarm_count,CURSUR_OFF);
/*********************延时子函数**************************/
voiddelayNOP()//us延时子函数(4.34us){
_nop_();
_nop_();
_nop_();
_nop_();
}
voiddelayms(unsignedintms)//ms延时子函数{unsignedchary;
while(ms--)
{
for(y=0;
y<114;y++);
}
}
//******************检查LCD忙状态**************************
bitlcd_busy()//检查LCD忙状态1忙,0闲
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
//***********************写指令数据***********************
voidlcd_wcmd(unsignedcharcmd)//写指令数据到LCD
{
while(lcd_busy())
{
;
}
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
P0=cmd;
delayNOP();
LCD_EN=0;
}
voidlcd_wdat(unsignedchardat)//写显示数据到LCD{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
P0=dat;
delayNOP();
LCD_EN=0;
}
voidwritesmh(unsignedcharadd,unsignedchardate)//显示个位和十位数据
{
unsignedcharshi,ge;shi=date/10;
ge=date%10;
lcd_wcmd(0x80+add);
delayms(5);
lcd_wdat(table2[shi]);delayms(5);
lcd_wdat(table2[ge]);delayms(5);}
//*********************初始化设定****************************
voidlcd_init()
{
LCD_PSB=1;//并口方式
LCD_RST=0;//液晶复位
delayms(5);//液晶复位
LCD_RST=1;//液晶复位
delayms(5);//液晶复位
lcd_wcmd(0x34);//扩充功能设定,扩充指令,选8位数据
delayms(5);
lcd_wcmd(0x30);//功能设定,基本指令操作,选8位数据delayms(5);
lcd_wcmd(0x0C);//显示开,关光标,关光标反白允许。
delayms(5);
lcd_wcmd(0x04);//光标的移动方向
delayms(5);
lcd_wc