




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
芜湖职业技术学院 信息工程系单 片 机 课 程 设 计题目:1602LCD显示的秒表系别/班级:信息工程系 11级嵌入式技术与应用专业小组成员:王玉瑶 吴秋云吴颖盈 项念念小组成员学号: 11芜湖职业技术学院 信息工程系目录132334454.1AT89C5154.21602LCD85166217298319361602LCD 372芜湖职业技术学院 信息工程系1602LCD秒表的显示原理图 43一、单片机原理单片机控制秒表是集于单片机技术、模拟电子技术、数字技术为一体的机电一体化高科技产品,具有功耗低,安全性高,使用方便等优点。它是一种在线式实时控制计算机,需要有较强的抗干扰能力,较低的成本。本次设计内容为以8051单片机为核心的秒表,采用数码管显示,单片机技术控制。利用单片机的定时器 /计数器定时和技术的原理,用集成电路芯片、 LCD数码管以及按键来设计计时器。将软、硬件有机地结合起来,使它拥有正确的计时、暂停、清零、并同时可以用数码管显示,在现实生活中应用广泛。二、课程设计的任务与要求设计任务:利用 AT89C51单片机结合1602LCD显示器设计一个秒表设计要求:1.本设计实现一个 1602LCD显示秒表2. 利用AT89C51控制整个电路来实现秒表的显示。大体上可以讲1602LCD秒表的显示主要包括硬件和软件两部分。 重点就是各部分硬件的连接设计以及程序的编写。 本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。3芜湖职业技术学院 信息工程系三、 课程设计目的《MCS-51单片机原理及应用》课的课程设计是四个学生一组完成一个老师给的一个题目,叫1602LCD显示的秒表。为了让我们能够综合运用自己学的课程的基本知识, 能够进行单片机的应用,掌握单片机程序设计调试和应用电路设计、分析及调试检测。通过这个实验:、使我们增进对单片机知识的进一步认识,也同时加深对单片机理论知识的理解。2、使我们掌握单片机的内部功能模块的应用,3、使我们了解和掌握单片机应用系统的软硬件设计过程, 方法即实现,为了以后设计和实现单片机应用系统打下基础。四、芯片资料4、1AT89C514芜湖职业技术学院 信息工程系AT89C51是128字节内部RAM,4KB可编程Flash存储器(可擦写1000次),三级程序存储器保密,静态工作频率:0Hz-24MHz,2个16位定时/计数器,一个串行通讯口,6个中断源,32条I/O引线,有片内时种振荡器。输入输出引脚资料:P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。在访问外部程序和外部数据存储器时, P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。5芜湖职业技术学院 信息工程系P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。其它控制或复用引脚:ALE/PROG30访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。PSEN29该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时, 每个机器周期输出 2个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。EA/Vpp31外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。6芜湖职业技术学院 信息工程系AT89C51特殊功能寄存器列表(适用于同一架构的芯片)符号地址注释*ACCE0H累加器*BF0H乘法寄存器*PSWD0H程序状态字SP81H堆栈指针DPL82H数据存储器指针低8位DPH83H数据存储器指针高8位*IEA8H中断允许控制器*IPD8H中断优先控制器*P080H端口0*P190H端口1*P2A0H端口2*P3B0H端口3PCON87H电源控制及波特率选择*SCON98H串行口控制器SBUF99H串行数据缓冲器*TCON88H定时器控制TMOD89H定时器方式选择TL08AH定时器0低8位TL18BH定时器1低8位TH08CH定时器0低8位TH18DH定时器1高8位带*号的特殊功能寄存器都是可以位寻址的寄存器4.11602LCD7芜湖职业技术学院 信息工程系1602字符型LCD简介:字符型液晶显示模块是一种专门用于显示字母、 数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。1602LCD分为带背光和不带背光两种,基控制器大部分为 HD44780.1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm引脚功能说明:1602LCD采用标准的14脚(无背光)或 16脚(带背光)接口,各引脚接口说明如下表 1所示:编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 数据2 VDD 电源正极 10 D3 数据3 VL 液晶显示偏压 11 D4 数据4 RS 数据/命令选择 12 D5 数据8芜湖职业技术学院 信息工程系5 R/W 读/写选择 13 D6 数据6 E 使能信号 14 D7 数据7 D0 数据 15 BLA 背光源正极8 D1 数据 16 BLK 背光源负极表1:引脚接口说明第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。9芜湖职业技术学院 信息工程系第15脚:背光源正极。第16脚:背光源负极。1602LCD的指令说明及时序:1602液晶模块内部的控制器共有 11条控制指令,如下表 2所示:表2:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码 01H,光标复位到地址 00H位置。10芜湖职业技术学院 信息工程系指令2:光标复位,光标返回到地址 00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示 5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙指令10:写数据。指令11:读数据。11芜湖职业技术学院 信息工程系与HD44780相兼容的芯片时序下表 3如下:读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0—D7=数据写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无表3:基本操作时序表读写操作时序如图 2和3所示:图2读操作时序图3写操作时序1602LCD的RAM地址映射及标准字库表 :12芜湖职业技术学院 信息工程系液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平, 表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,图 4是1602的内部显示地址。图41602LCD内部显示地址例如第二行第一个字符的地址是 40H,因为写入显示地址时要求最高位D7恒定为高电平 1所以实际写入的数据应该是 01000000B40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态 。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图5所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码13芜湖职业技术学院 信息工程系图5字符代码与图形对应图1602LCD的一般初始化(复位)过程 :延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置14芜湖职业技术学院 信息工程系写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置五、电路分析总体设计分析本系统中,硬件电路主要有电源电路,晶振电路,复位电路,显示电路以及一些按键电路等,本系统采用AT89C51单片机为中心器件,利用定时器计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,蜂鸣器电路以及一些按键电路等来设计计数器,将软、硬件有机地结合起来。硬件系统采用PROTEUS功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。5.1电源电路电源电路是系统最基本的部分,任何电路都离不开电源部分,随着半导体工艺的发展,稳压电路也采用集成电路器件来制成。可采用独立的稳压电源。这种供电方式的优点是稳压可靠,且有各种成熟电路可供选择。由集成稳压器具有体积小,外界线路简单,使用方便,工作可靠等优点。因此,在各种电子设备中应用十分普遍,为了跟上15芜湖职业技术学院 信息工程系时代的发展,可采用W7800系列三端稳压器,主要利用它的输出电压是固定的在使用中不能进行调整等优点。5.2晶振电路AT89C51内部的振荡电路是一个高增益反相放大器,引脚RXD和TXD分别是此反向振荡放大器的输入端和输出端。该反向放大器可以配置为内部方式的片内振荡器。如图所示,这里选用12MHE的内部振荡方式,电路如下:电容器C1,C2起稳定振荡频率,快速起振的作用,C1,C2可在20~100PF之间取,这里取30PF,接线时要使晶振振荡器尽可能接近单片机。5.3复位电路采用上电+按键复位电路,上电后,由于电容充电,使 RST持续一段时间高电平时间。当单片机已在运行之中时,按下复位按键也能使RST持续一段时间的高电平,从而实现上电加开关复位的操作。这不仅能时单片机复位,而且还能使单片机的外围芯片也同时复位,当程序出现错误时,可以随时使电路复位。16芜湖职业技术学院 信息工程系复位是单片机的初始化操作。其主要功能是把 PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时, 为摆脱困境,也需按复位键重新启动。除 PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表 1所示。寄存器复位状态寄存器复位状态PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3FFHSCON00HIPXX000000BSBUF不定IE0X000000BPCON0XXX0000BTMOD00H表1一些寄存器的复位状态因STC89C52单片机需高电平(3.7~5.5V)复位,且复位时流入单片机的电流不能超过10mA。具体参数:根据所需要的复位参数可得当按下SW键时出现两个机器周期的高电平在单片机REST端产生的压降等于:VCCR2=5V)10K4.17VR1R2(0.2K1K17芜湖职业技术学院 信息工程系图复位电路5.4显示电路显示电路既可以选用液晶显示器,也可以选用数码管显示,我们采用液晶显示电路1602LCD引脚接口说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4RS数据命令选择端口(H/L)12D5DataI/O5R/W读/写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D1DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极显示电路部分引脚分析 :3脚:VL,液晶显示偏压信号,用于调整 LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,此脚电压为0时可以得到最强的对比度。18芜湖职业技术学院 信息工程系4脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。命令字节,即是用来对LCD1602的一些工作方式作设置的字节; 数据字节,即使用以在 1602上显示字节。5脚:R/W,读写选择端。当此脚为高电平可对 LCD1602进行读数据操作,反之进行写数据操作。6脚:E,使能信号,其实是 LCD1602的数据控制时钟信号,利用该信号的上升沿实现对 LCD1602的数据传输。7~14脚:8位并行数据口,使得对 LCD1602的数据读写大为方便。基本操作时序:1)读状态:输入:RS=L,RW=H,E=H;输出:D0~D7=状态字2)写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲;输出:无3)读数据:输入:RS=H,RW=H,E=H;输出:D0~D7=数据4)写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲;输出:无需要两个写时序:①当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。②当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一19芜湖职业技术学院 信息工程系个高脉冲将数据写入。六、代码分析#include<reg51.h>,#include<intrins.h> 皆属于头文件,前者是定义 51单片机特殊功能寄存器和位寄存器的,后者包含特殊指令例如: crol(),cror() 。#defineucharunsignedchar,#defineuintunsignedint,define delayNOP(){nop();nop();nop()} 皆属于宏定义,后者是将三个延时周期定义在一起,用一个 delayNOP()表示。VoidLCD_intialize,voidLCD_Set_POS(uchar),voidDisplay_String(char*,char) ;皆为调用函数,第一个是调用 LCD20芜湖职业技术学院 信息工程系初始化函数;第二个是调用 LCD的显示位置函数;第三个是调用 LCD写数据函数;第四个是调用 LCD指定行上显示字符串函数。SbitK1=P1^0,sbitK2=P2^1,sbitBEEP=3^0,sbitLCD_RS=P2^0,sbitLCD_RW=P2^1,sbitLCD_EN=P2^2;皆为个函数接口声明,定义K1、K2为两个控制开关;定义BEEP为扬声器接口;RS为寄存器选择高电平(1)时选择数据寄存器、低电平(0)时选择指令寄存器;RS为读写信号,高电平(1)时惊醒读操作,低电平(0)时进行写操作;E(或EN)端为使能端(enable),将单片机与LCD1602显示器连接。UcharKeyCount=0;KeyCount 为按键计数变量,用于累计按键的次数。定义其为无符号整型,并且付初值为 0.uchar code msg1[]={"Second Watch 0 "} ,uchar codemsg2[]={">>>> "} ;定义两个一维数组,在 protues 仿真软件中,当按下 play键后,1602LCD显示屏是会出现这两个数组中的字符。ucharcodePrompts[][16]={{"::1---->"},{"::2---->::2"},{"::1->2::3-->"},{"::1->2::3-->4"}21芜湖职业技术学院 信息工程系}定义一个二维数组,将其中的一维显示于 1602LCD上。K1为启停控制按钮,第一次按下时开始计数,显示“: :1-- ”;当第二次按下时停止计数,显示 "::2---->::2 " ;uchar Time_Buffer[] ={0,0,0,0} , ucharLCD_Display_Buffer[] ={"00:00:00:00"}; 定义两个数组,一个用于计时缓冲,一个用于显示时间缓冲。voidBeeP(){uchari,j=70;for(i=0;i<180;i++){while(--j);BEEP=~BEEP;}BEEP=0;}定义一个调用蜂鸣器的子函数。For(i=0;i<180;i++)用于控制蜂鸣器响的时间,BEEP=~BEEP用于使蜂鸣器进行短暂的响一下又不响的效果。因为蜂鸣器接地,只有当P3.0接入高电平(即1)时,蜂鸣器才工作。所以在响了一声过后,级(执行完成之后)将BEEP赋值为0,让它处于不导通状态,蜂鸣器不响。voidDelayX(uintms){22芜湖职业技术学院 信息工程系uchari;while(ms--)for(i=0;i<120;i++);}定义一个延时子函数voidShow_Second(){uchari;LCD_Set_POS(0X45); 设置LCD显示起点for(i=3;i!=0xff;i--){将两位整数的1、100s,秒,分,时转换为 8位数字字符LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'0';在i=3,2,1,0时分别显示时,分,秒,1/100sLCD_Write_Data(LCD_Display_Buffer[2*i+1]);LCD_Write_Data(LCD_Display_Buffer[2*i]);LCD_Write_Data(':');}定义显示计时函数}LCD_Set_POS(0X45),调用函数,用于调用设置显示位置函数,在此子函数中又嵌套了一个函数调用,LCD_Write_Command(Position|0X80) ( 即LCD_Write_Command(0X45|0X80))函数。进行或操作:23芜湖职业技术学院 信息工程系45010001018010000000C511000101或操作后得到结果 C5,即LCD_Write_Command(0XC5),调用该函数(即向LCD写指令函数)。LCD_Busy_Check()用于检测LCD是否处于忙状态,假如处于忙状态, RS为0(选择指令寄存器),RW为1(进行读操作),EN为1(寄存器使能)。DelayNOP()表示延时四个机器周期。Result=(bit)(P0&0X80) ,P0的初始状态是FF.进行与操作:FF1111111180100000008010000000与操作后得到的结果80,即return为80(10000000)将EN赋值为0,即寄存器使能端禁止用。返回至LCD写指令子程序,RS=0(选择指令寄存器),RW=0(进行写操作),EN=0(使能端禁止使用)。延时两个机器周期,将 cmd(0XC5)的值赋给P0口,延时四个空白机器周期。使能端置1,延时四个空白机器周期。EN=0寄存器禁止使用。voidTime0()interrupt1using0{TH0=-10000/256;TL0=-10000%256;24芜湖职业技术学院 信息工程系Time_Buffer[0]++;if(Time_Buffer[0]==100){Time_Buffer[0]=0;Time_Buffer[1]++;}if(Time_Buffer[1]==60) // 秒{Time_Buffer[1]=0;Time_Buffer[2]++;}if(Time_Buffer[2]==60) // 分{Time_Buffer[2]=0;Time_Buffer[3]++;}if(Time_Buffer[3]==24) // 时Time_Buffer[3]=0;}此函数为中断函数,interrupt1using0 为定时器T0工作于0号寄存器,TH0=-10000/256,TL0=-10000%256,用于计算定时器的初值,除得的放在高八位,余的的放在第八位。接下来的代码用于控制在1602LCD显示屏中秒表自动进位换算的的效果, (1小时=60分钟,1分钟=60秒,1秒=100毫秒)当小时到达 24时,清零。voidmain(){25芜湖职业技术学院 信息工程系uchari;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){Case1:Case3:TR0=1;Display_String(Promts[i-1],0);break;Case2:Case4:TR0=0;26芜湖职业技术学院 信息工程系Display_String(Promts[i-1],0);break;default:TR0=0;break;}while(K1==0);Beep();}elseif(K2==0){TR0=0;KeyCount=0;for(i=0;i<4;i++)Time_Buffer[i]=0;Display_String(msg1,0);Beep();DelayX(100);While(K2==0);}Show_Second();}27芜湖职业技术学院 信息工程系}主函数,中断允许寄存器 IE,IE=0x82=10000010表示EA为1,CPU开放中断;ET0=1,允许外部中断 1中断。定时/计数器方式控制寄存器TMOD,TMOD=0x01=00000001,表示在T0方式字段中工作方式为方式1,是定时器方式,定时器的技术不受外部引脚输入电平的控制,而只受定时器运行控制位( TR0、TR1)的控制。进行高低8为赋初值。接着调用初始化 LCD子函数,在其子函数中进行顺序执行, 每个都先延时5毫秒,接着调用写指令函数。返回至主程序。接着调用显 示 函 数 , 在 LCD 指 定 行 上 显 示 字 符 串 ,Display_String(msg1,0x00) ,msg1为一个一维数组(SecondWatch0),即Display_String(Second Watch0,0x00),在该子函数中调用设置显示位置子函数,在该子函数中调用写指令子函数进行或操作:000000000080100000008010000000与操作后得到结果为 80,即LCD_Write_Command(0X80),调用该函数(即向LCD写指令函数)。LCD_Busy_Check()用于检测LCD是否处于忙状态,假如处于忙状态,RS为0(选择指令寄存器),RW为1(进行读操作),EN为1(寄存器使能)。DelayNOP()表示延时四个机器周期。Result=(bit)(P0&0X80) ,P0的初始状态是FF.进行与操作:28芜湖职业技术学院 信息工程系FF1111111180100000008010000000与操作后得到的结果80,即return为80(10000000)将EN赋值为0,即寄存器使能端禁止用。返回至LCD写指令子程序,RS=0(选择指令寄存器),RW=0(进行写操作),EN=0(使能端禁止使用)。延时两个机器周期,将 cmd(0X80)的值赋给P0口,延时四个空白机器周期。使能端置1,延时四个空白机器周期。EN=0寄存器禁止使用。Display_String(msg2,0x40); 该调用函数类似于上面所述。 While(1)进入死循环。在里面进行着秒表的计数功能,以及蜂鸣器的工作。七、设计分析7、1系统设计分析设计的电路主要是能多次记时和查询时间, 记时的多少通过显示电路显示出来,每一次计时可以通过控制电路查询出来。 设计框图如图2-1所示;用1602LCD设计的秒表系统框图外围电路显示电路单片机电源电路 键盘电路29芜湖职业技术学院 信息工程系7、2显示部分设计分析显示部分是本次设计的重要部分,一般有以下两种方案:方案一:采用LED显示,在单片机应用系统中最常用的 LED数码管为7段数码管,可利用LED显示器灵活地构成所要求位数的显示,分静态显示和动态显示。对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,且可靠性也较低。而对于动态显示方式,虽可以避免静态显示的问题,但设计上如果处理不当,易造成亮度低,有闪烁等问题。方案二:采用LCD显示。是一种低功耗显示器件,具有显示内容丰富、体积小、重量轻、寿命长、使用方便、安全省电等优点,在计算器、万用表、袖珍式仪表和低功耗微机应用系统中得到广泛使用。 其显示的质量高,每个显示器每一点在收到信号后就一直保持那种彩色和亮度,恒定发光,而不像阳极射线管显示器那样刷新亮点, 画面质量高且不闪烁。鉴于上述原因,我们采用方案二。7、3软件设计分析在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。把一个多功能的复杂程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。总流程图:30芜湖职业技术学院 信息工程系八、调试成功与否图一 刚启动时截图31芜湖职业技术学院 信息工程系图二运行时截图图三按下清零后截图调试成功,调试结果如上图所示。32芜湖职业技术学院 信息工程系KeilC51 软件是目前最流行的开发 8051系列的单片机的软件工具。KeilC51 提供了包括 C语言编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器等在内的完整开发方案, 通过一个集成开发环境uVision3IDE 将这些部分结合起来。打开Keil 软件,将代码输入调试并在错误全被解决的情况下生成对应的hex文件;打开Proteus软件,将对应的原理图和生成的 hex文件连接。在调试过程中我们出现了如下错误:1:“单机错误信息,让指针跳到错误行,一步步调试之后得知是代码输入时输入法错误,把大写” V”改写为小写”v”。2:33芜湖职业技术学院 信息工程系当我们把上面的错误改了之后, 又出现了以上错误,我们通过书籍、小组成员的共同努力,知道了是由于我们修改代码中一些不能修改和覆盖的变量,导致出现了以上错误。在我们细心寻找下发现时少了一个分号。3:34芜湖职业技术学院 信息工程系当我们把分号加上了之后,又出现了如上图所示的错误。我们全组成员齐心协力,根据错误提示,将一个一个的错误改正。4:当我们再次运行时,又出现以上的两个错误。通过我们全组同学的努力以及其他同学的帮忙,我们得知是由于输入时的马虎, 我们在前面定义的是propts,而这里出现了 promts,所以导致了错误。根据错误,一步一步的检查、调试之后,我们把错误全部解决,如图:35芜湖职业技术学院 信息工程系九、参考文献张大明.单片机控制实训指导及综合应用实训[M].北京:机械工业出版社陈益飞.单片机原理及应用技术.北京[M]:国防工业出版社,2011张伟.张杰编著.单片机原理及应用.北京[M]:机械工业出版社,孙余凯.精选实用电子电路260例[M].北京:电子工业出版社.,郭天祥51单片机C语言教程.北京:电子工业出版社闫玉德俞虹.MCS-单片机原理与应用北京:机械工业出版社陈益飞.单片机原理及应用技术[M].北京:国防工业出版社.,彭伟单片机C语言程序设计实训100例.北京:电子工业出版社36芜湖职业技术学院 信息工程系1602LCD秒表的显示源代码://------------------------------------Main.c-----------------------------------------//名称:用 1602LCD设计秒表//-----------------------------------------------------------------------------------//说明:首次按下 K1键时开始计时,再次按下时暂停,第三次按下时继续// 累计计时,再次按下时停止计时, K2键用于清零秒表//-----------------------------------------------------------------------------------include<reg51.h>include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}//LCD控制函数voidLCD_Initialize();voidLCD_Set_POS(uchar);voidLCD_Write_Data(uchar);voidDisplay_String(uchar*,uchar);sbitK1=P1^0;sbitK2=P2^1;sbitBEEP=P3^0;sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;ucharKeyCount=0;ucharcodemsg1[]={"SecondWatch0"};ucharcodemsg2[]={">>>> "};ucharcodePrompts[][16]={{"::1----> "},{"::2---->::2 "},{"::1->2::3--> "},{"::1->2::3-->4"}}//计时缓冲与显示缓冲ucharTime_Buffer[] ={0,0,0,0};ucharLCD_Display_Buffer[]={"00:00:00:00"};//-------------------------------------------------------------------------------------//蜂鸣器//-------------------------------------------------------------------------------------voidBeeP()37芜湖职业技术学院 信息工程系{uchari,j=70;for(i=0;i<180;i++){while(--j);BEEP=~BEEP;}BEEP=0;}//-------------------------------------------------------------------------------------//延时//-------------------------------------------------------------------------------------voidDelayX(uintms){uchari;while(ms--)for(i=0;i<120;i++);}//-------------------------------------------------------------------------------------//显示计时//-------------------------------------------------------------------------------------voidShow_Second(){uchari;LCD_Set_POS(0X45); //设置LCD显示起点for(i=3;i!=0xff;i--){将两位整数的1、100s,秒,分,时转换为8位数字字符LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'0';//在i=3,2,1,0时分别显示时,分,秒, 1/100sLCD_Write_Data(LCD_Display_Buffer[2*i+1]);LCD_Write_Data(LCD_Display_Buffer[2*i]);LCD_Write_Data(':');}}//------------------------------------------------------------------------------------//Time0中断//------------------------------------------------------------------------------------voidTime0()interrupt1using0{TH0=-10000/256;TL0=-10000%256;38芜湖职业技术学院 信息工程系Time_Buffer[0]++;if(Time_Buffer[0]==100){Time_Buffer[0]=0;Time_Buffer[1]++;}if(Time_Buffer[1]==60) //秒{Time_Buffer[1]=0;Time_Buffer[2]++;}if(Time_Buffer[2]==60) //分{Time_Buffer[2]=0;Time_Buffer[3]++;}if(Time_Buffer[3]==24) //时Time_Buffer[3]=0;}//------------------------------------------------------------------------------------//主函数//------------------------------------------------------------------------------------voidmain(){uchari;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){Case1:Case3:TR0=1;Display_String(Promts[i-1],0);break;Case2:Case4:TR0=0;Display_String(Promts[i-1],0);39芜湖职业技术学院 信息工程系break;default:TR0=0;break;}while(K1==0); //Beep();}elseif(K2==0){TR0=0;KeyCount=0;for(i=0;i<4;i++)Time_Buffer[i]=0;Display_String(msg1,0);Beep();DelayX(100);While(K2==0); //}Show_Second();}}//-------------------------------------160LCD.C-------------------------------------//1602LCD显示驱动函数//----------------------------------------------------------------------------------include<reg51.h>include<intrins.h>defineucharunsignedchardefineuintunsignedintdefineDelayNOP(){_nop();_nop();_nop();_nop();}sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;bitLCD_Busy_Check();voidLCD_Busy_Check();voidLCD_Initialize();voidLCD_Write_Command(uchar);voidLCD_Write_Data(uchar);//------------------------------------------------------------------------------//延时//------------------------------------------------------------------------------voidDelayMS(uintms){40芜湖职业技术学院 信息工程系uchart;while(ms--)for(t=0;t<120;t++);}//------------------------------------------------------------------------------//LCD忙检查//------------------------------------------------------------------------------bitLCD_Busy_Check(){bitResult;LCD_RS=0;LCD_RW=1;LCD_EN=1;DelayNOP();Result=(bit)(P0&0X80);LCD_EN=0;returnResult;}//-----------------------------------------------------------------------------//向LCD写指令//-----------------------------------------------------------------------------VoidLCD_Write_Command(ucharcmd){While(LCD_Busy_Check());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_(); _nop_();P0=cmd; DelayNOP();LCD_EN=1;DelayNOP();LCD_EN=0;}//----------------------------------------------------------------------------//向LCD写数据//----------------------------------------------------------------------------voidLCD_Write_Data(ucharstr){while(LCD_Busy_Check());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=str;DelayNOP();LCD_EN=1;DelayNOP();LCD_EN=0;}//----------------------------------------------------------------------------//初始化LCD//----------------------------------------------------------------------------voidLCD_Initialize(){41芜湖职业技术学院 信息工程系DelayMS(5);LCD_Write_Command(0x38);DelayMS(5);LCD_Write_Command(0x0c);DelayMS(5);LCD_Write_Command(0x06);DelayMS(5);LCD_Write_Command(0x01);DelayMS(5);}//----------------------------------------------------------------------------//设置显示位置//----------------------------------------------------------------------------VoidLCD_Set_POS(ucharPosition){LCD_Write_Command(Position|0X80);}//----------------------------------------------------------------------------//显示函数,在 LCD指定行上显示字符串//----------------------------------------------------------------------------voidDisplay_String(uchar*str,ucharLineNo){uchark;LCD_Set_POS(LineNo);for(k=0;k<16;k++)LCD_Write_Data(str[k]);}42芜湖职业技术学院 信息工程系1602LCD秒表的显示原理图 目 录1IPTV全网简介.................................................错误!未定义书签。1.1全网系统架构...........................................................错误!未定义书签。1.1.1系统整体架构错误!未定义书签。.................................................43芜湖职业技术学院 信息工程系1.1.2内容服务平台(内容运营商提供)错误!未定义书签。.............1.1.3运营支撑平台(内容运营商提供)错误!未定义书签。.............1.1.4网络承载分发平台(电信运营商提供)错误!未定义书签。/....1.1.5终端错误!未定义书签。.................................................................2前端系统项目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB31/T 845-2020新能源汽车公共数据采集技术规范
- DB31/T 554-2015大型公共文化设施建筑合理用能指南
- DB31/T 5000-2012住宅装饰装修服务规范
- DB31/T 34-2020工业炉窑热平衡测试与计算通则
- DB31/T 192.2-2015单季晚稻栽培技术规范第2部分:机械化育插秧栽培技术
- DB31/T 1240.2-2020公共数据共享交换工作规范第2部分:平台接入技术要求
- DB31/T 1143-2019空压机系统能效在线监测技术规范
- DB31/T 1065-2017公共汽(电)车线路和站点统一编码规范
- DB31/T 1055-2017电动汽车无线充电系统第2部分:设备要求
- DB31/ 833-2014钢铁感应热处理工序单位产品能源消耗限额
- (新版教材)粤教版六年级下册科学全册课件
- 调机品管理规定
- 福建省医学会专科分会管理办法
- DB63∕T 1683-2018 青海省农牧区公共厕所工程建设标准
- 我们的互联网时代课件PPT模板
- 维修电工高级技师论文(6篇推荐范文)
- 新编简明英语语言学教程第二版课后参考答案
- 最新房地产开发预算表
- 最新零售药店GSP认证条款
- 家庭住房情况查询申请表
- 2019年甘肃省天水市中考生物试题(word版,含答案)
评论
0/150
提交评论