1、1602lcd显示的秒表11602lcd显示的秒表(1)1602lcd显示的秒表(1)PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000HFFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,
2、该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。 XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。2.2系统分析设计的电路主要是能多次记时和查询时间,记时的多少通过显示电路显示出来,每一次计时可以通过控制电路查询出来。设计框图如图2-1所示; 图2-13硬件系统的设计3.1硬件介绍根据设计要求和设计思路,硬件电路有两部分组成,即单片机按键电路,LCD显示器电路。图2-2 为硬件电路设计框图。图2-2系统硬件电路根据课题设计要求,它由以下几个部件组成:单片机89C52RC、电源、时分秒显示模块。时分秒显示采
3、用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。显示模块中时分秒显示驱动、校时模块都通过89C52RC的I/O口控制。显示模块中的复位电路由89C52RC的RESET端控制。电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由5V的电池供电,以保证停电时正常走时。正常情况下电池是不提供电能的,以保证电池的寿命。3.2部分硬件原理图3.2.1STC89C52管脚图如图3-1所示: 图3-13.2.2 1602LCD液晶硬件图如图3-2所示:图3-23.3最小单片机系统如图3-3所示:图3-34系统的软件设计此部
4、分主要介绍显示模块,显示模块是实现数字钟的重要部分,在显示时,首先将时间十进制数据转化为显示段码,然后送往液晶显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变R1(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。如图4-1所示:图4-1结束语通过这次实验,我学会了熟练运用protues,keil,protel等软件,在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。其次,在这次课程设计中,我们运用到了以前所学的专业课知识。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学
5、我发现效率很高,这是我做这次课程设计的又一收获后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。附录1 protel原理图附录2 PCB图附录3 protues仿真图附录4 程序清单#include #include #define ucha
6、r unsigned char#define unit unsigned int #define delayNOP() _nop_();_nop_();_nop_();_nop_();/LCD 控制void LCD_Initialize();void LCD_Set_POS(uchar);void LCD_Write_Data(uchar);void Display_String(uchar *,uchar);sbit K1=P10;sbit K2=P11;sbit BEEP=P30;sbit LCD_RS=P20;sbit LCD_RW=P21;sbit LCD_EN=P22;uchar K
7、eyCount=0;uchar code msg1=Second Watch 0;uchar code msg2= ;uchar code Prompts16= :1- , :1- :2 , :1-2 :3- , :1-2 :3-4;/计时缓冲与显示缓冲uchar Time_Buffer =0,0,0,0;uchar LCD_Display_Buffer=00:00:00:00;/蜂鸣器void Beep() uchar i,j=70; for (i=0;i180;i+) while(-j);BEEP=BEEP; BEEP=0;/延时void DelayX(unit ms) uchar i;
8、while(ms-) for(i=0;i 120;i+) ;/显示计时void Show_Second() uchar i; LCD_Set_POS(0x45);/设置LCD显示起点 for(i=3;i!=0xff;i-) /将两位整数的1/100s,秒,分,时转换为8位数字字符 LCD_Display_Buffer2*i+1=Time_Bufferi/10+0; LCD_Display_Buffer2*i =Time_Bufferi%10+0; /在i=3,2,1,0时分别显示时,分,秒,1、100s LCD_Write_Data(LCD_Display_Buffer2*i+1); LCD_
9、Write_Data(LCD_Display_Buffer2*i); LCD_Write_Data(:); /Time0中断 void Time0() interrupt 1 using 0 TH0=-10000/256; TL0=-10000%256; Time_Buffer0+; if(Time_Buffer0=100) Time_Buffer0=0; Time_Buffer1+; if(Time_Buffer1=60) /秒 Time_Buffer1=0;Time_Buffer2+; if(Time_Buffer2=60) /分 Time_Buffer2=0;Time_Buffer3+;
10、 if(Time_Buffer3=24) /时 Time_Buffer3=0; /主函数 void main() uchar i; IE=0x82; TMOD=0x01; TH0=-10000/256; TL0=-10000%256; LCD_Initialize(); Display_String(msg1,0x00); Display_String(msg2,0x40); while(1) if(K1=0) DelayX(100); i=+KeyCount; switch(i) case 1: case 3:TR0 =1; Display_String(Promptsi-1,0); bre
11、ak; case 2: case 4:TR0 =0; Display_String(Promptsi-1,0); break; default:TR0=0; break; while (K1=0) ; /等待释放K1键 Beep(); else if(K2=0) TR0=0; KeyCount=0; for(i=0;i4;i+) Time_Bufferi=0; /清零计时缓冲 Display_String(msg1,0); Beep(); DelayX(100); while (K2=0) ; /等待释放K2键 Show_Second(); /1602LCD显示驱动函数 e #include
12、#include #define uchar unsigned char #define uint unsigned int #define DelayNOP()_nop_();_nop_();_nop_();_nop_(); bit LCD_Busy_Check(); void LCD_Initialize(); void LCD_Set_POS(uchar) ; void LCD_Write_Command(uchar); void LCD_Write_Data(uchar); /延时 void DelayMS(uint ms) uchar t; while(ms-) for (t=0;t
13、120;t+); /LCD忙检查 bit LCD_Busy_Check() bit Result; LCD_RS=0;LCD_RW=1;LCD_EN=1;DelayNOP(); Result=(bit)(P0&0x80); LCD_EN=0; return Result; /向LCD写指令 void LCD_Write_Command(uchar cmd) while (LCD_Busy_Check() ); LCD_RS=0;LCD_RW=0;LCD_EN=0; _nop_(); _nop_(); P0=cmd; DelayNOP(); LCD_EN=1;DelayNOP(); LCD_EN
14、=0; /向LCD写数据 void LCD_Write_Data(uchar str) while (LCD_Busy_Check() ; LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=str;DelayNOP(); LCD_EN=1;DelayNOP();LCD_EN=0; /初始化LCD void LCD_Initialize() DelayMS(5);LCD_Write_Command(0x38); DelayMS(5);LCD_Write_Command(0x0c); DelayMS(5);LCD_Write_Command(0x06); DelayMS(5);LCD_W
15、rite_Command(0x01); DelayMS(5); /设置显示位置 void LCD_Set_POS(uchar Position) LCD_Write_Command(Position|0x80); /显示函数,在LCD指令行上显示字符串 void Display_String(uchar*str,uchar LineNo) uchar k; LCD_Set_POS(LineNo); for (k=0;k16;k+) LCD_Write_Data (strk); 附录5元器件清单序号名称型号数量1单片机STC89C5212排针2.54mm单排针2排3排阻2K14瓷片电容30pf25晶振11.0592MHZ16单片机插座40P17按键18万能板双面板10cm*15cm19电解电容10uF/16V110电阻10K111电阻1K112可调电阻W103113发光二极管红114蜂鸣器HYDZ115PNP三极管90121
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1