1、1602lcd显示的秒表11概述1.1课题的研究意义和目的1、通过本实验的设计初步了解单片机工作原理和各功能端口的相关设置;2、掌握PROTEUS软件的安装和配置过程;3、学会绘制电路原理图;4、了解装载程序和调试;5、PROTEUS VSM 与uVision3的联调;6、用单片机仿真软件,并进行调试;7、掌握单片机相应的编程步骤,了解秒表相关的工作流程;8、熟悉KEILPROTEUS等相关软件的使用。2方案论证2.1 STC89C52主要功能特性1、兼容MCS51指令系统 2、8k可反复擦写(大于1000次)Flash ROM; 3、32个双向I/O口; 4、256x8bit内部RAM; 5
2、、3个16位可编程定时/计数器中断; 6、时钟频率0-24MHz; 7、2个串行中断,可编程UART串行通道; 8、2个外部中断源,共8个中断源; 9、2个读写中断口线,3级加密位; 10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能; 11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。STC89C52为8 位通用微处理器,采用工业标 准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及
3、与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连
4、接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL
5、 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),Flash 编程和程序校验期间,P1 接收低8 位地址。表.P1.0和P1.1的第二功能 引脚号功能特性P1.0T2,时钟输出P1.1T2EX(定时/计数器2)P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路
6、。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,
7、它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能 。P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。
8、对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为
9、0000HFFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。 XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。2.2系统分析设计的电路主要是能多次记时和查询时间,记时的多少通过显示电路显示出来,每一次计时可以通过控制电路查询出来。设计框图如图2-1所示; 图2-13硬件系统的设计3.1硬件介绍根据设计要
10、求和设计思路,硬件电路有两部分组成,即单片机按键电路,LCD显示器电路。图2-2 为硬件电路设计框图。图2-2系统硬件电路根据课题设计要求,它由以下几个部件组成:单片机89C52RC、电源、时分秒显示模块。时分秒显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。显示模块中时分秒显示驱动、校时模块都通过89C52RC的I/O口控制。显示模块中的复位电路由89C52RC的RESET端控制。电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由5V的电池供电,以保证停电时正常走时。正常情况下电池是不提供电能的,以
11、保证电池的寿命。3.2部分硬件原理图3.2.1STC89C52管脚图如图3-1所示: 图3-13.2.2 1602LCD液晶硬件图如图3-2所示:图3-23.3最小单片机系统如图3-3所示:图3-34系统的软件设计此部分主要介绍显示模块,显示模块是实现数字钟的重要部分,在显示时,首先将时间十进制数据转化为显示段码,然后送往液晶显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变R1(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。如图4-1所示:图4-1结束语通过这次实验,我学会了熟练运用protues,keil,protel等软件,在做本次课程设计的过程中,我感触最深的当
12、属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。其次,在这次课程设计中,我们运用到了以前所学的专业课知识。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免
13、下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。附录1 protel原理图附录2 PCB图附录3 protues仿真图附录4 程序清单#include #include #define uchar 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
14、(uchar *,uchar);sbit K1=P10;sbit K2=P11;sbit BEEP=P30;sbit LCD_RS=P20;sbit LCD_RW=P21;sbit LCD_EN=P22;uchar KeyCount=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;
15、/蜂鸣器void Beep() uchar i,j=70; for (i=0;i180;i+) while(-j);BEEP=BEEP; BEEP=0;/延时void DelayX(unit ms) uchar i; 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_Dis
16、play_Buffer2*i =Time_Bufferi%10+0; /在i=3,2,1,0时分别显示时,分,秒,1、100s LCD_Write_Data(LCD_Display_Buffer2*i+1); LCD_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_Buffer
17、1+; if(Time_Buffer1=60) /秒 Time_Buffer1=0;Time_Buffer2+; if(Time_Buffer2=60) /分 Time_Buffer2=0;Time_Buffer3+; 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); w
18、hile(1) if(K1=0) DelayX(100); i=+KeyCount; switch(i) case 1: case 3:TR0 =1; Display_String(Promptsi-1,0); break; 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; /清零计时缓冲 D
19、isplay_String(msg1,0); Beep(); DelayX(100); while (K2=0) ; /等待释放K2键 Show_Second(); /1602LCD显示驱动函数 e #include #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 L
20、CD_Write_Command(uchar); void LCD_Write_Data(uchar); /延时 void DelayMS(uint ms) uchar t; while(ms-) for (t=0;t120;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_
21、Busy_Check() ); LCD_RS=0;LCD_RW=0;LCD_EN=0; _nop_(); _nop_(); P0=cmd; DelayNOP(); LCD_EN=1;DelayNOP(); LCD_EN=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_
22、Write_Command(0x38); DelayMS(5);LCD_Write_Command(0x0c); DelayMS(5);LCD_Write_Command(0x06); DelayMS(5);LCD_Write_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