为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于51单片机的9999秒倒计时器设计

2017-09-19 13页 doc 342KB 50阅读

用户头像

is_668482

暂无简介

举报
基于51单片机的9999秒倒计时器设计              西安工程大学 单 片 机                   课                   程 设 计 学院:    计算机学院                专 业 班 级:    信科四班              课 题 名 称:基于51单片机的1602LCD多态显示器设计 指 导 教 师:      师红宇                组长:郑日超 学号:21209030407 组员:宋艳丽 学号:21209030409       陈亚楠      212090304...
基于51单片机的9999秒倒计时器设计
              西安工程大学 单 片 机                   课                   程 设 计 学院:    计算机学院                专 业 班 级:    信科四班              课 题 名 称:基于51单片机的1602LCD多态显示器设计 指 导 教 师:      师红宇                组长:郑日超 学号:21209030407 组员:宋艳丽 学号:21209030409       陈亚楠      21209030414       高丹蕊      21209030416 目录 一. 摘要    6 二.总体设计    7 2.1设计要求    7 三.AT89C51机介绍    7 3.1单片机结构介绍    7 3.2单片机组成原理    9 四.复位电路工作原理    9 4.1上电自动复位原理    10 五.数码管显示电路    12 5.1 LED数码显示器的结构    13 5.2 LED数码显示器的分类    15 5.3 LED数码显示方式    16 六.时钟电路模块    17 七.程序设计及原理图    18 7.1程序设计    18 7.2原理图    23 7.3 PCB图    23 7.4元件清单    24 八.结束语    25 九.参考文献    26 摘要 近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。由于单片机具有体积小、易于产品化、面向控制、集成度高、功能强、可靠性高、价格低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中得到了广泛的应用。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。但是仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 本针对1602 LCD显示器的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的复位功能,延时功能等等。LCD动态显示系统需要用到锁存器、LCD显示器,HD44780等主要模块,通过不同的模块之间相互作用,完成LCD动态显示的初步硬件结构。对于LCD显示器来说,采用以软件为主的接口,即采用Keil uVision3软件程序进行译码。 【关键词】  单片机    Keil3  1602LCD显示器 二.总体设计方案   LCD显示器器以AT89C51单片机为核心,起着控制作用。系统包括锁存器、LCD显示器,HD44780。LCD显示的总体设计思路分为五个模块:复位电路,晶振电路模块,AT89C51,LCD显示电路模块,上拉电阻模块。 2.1设计要求: 1)、应用MCS-51单片机设计LCD电路。 2)、选用液晶显示器,从左到右显示“WELCOME TO WWW.XPU.EDU.CN”。 3)、硬件设计根据设计的任务选定合适的单片机,根据控制对象设计接口电路。设计的单元电路必须有工作原理,器件的作用,分析和计算过程 4)、软件设计根据电路工作过程,画出软件图,根据流程图编写相应的程序,进行调试并打印程序清单; 5)、原理图设计根据所确定的设计电路,利用Proteus等有关工具软件绘制电路原理图,生成PCB板图、提供元器件清单。 三、硬件设计 3.1 80C51单片机 80C51 芯片内部集成了 CPU、RAM、ROM、定时/计数器和I/O口等各功能部件,并由内部总线把这些部件连接在一起。80C51单片机内部包含以下一些功能部件: ①一个8位CPU; ②一个片内振荡器和时钟电路; ③4KB ROM(80C51有4KB掩膜ROM,87C51有4KB EPROM,80C31片内有无ROM);     ①128B内RAM;     ②可寻址64KB的外ROM和外RAM控制电路;     ③两个16位定时/计数器;   ①21个特许功能寄存器;   ②4个8位并行I/O口,共32条可编程I/O端线;   ③一个可编程全双工串行口;5个中断源,可设置成2个优先级。 可编程全双工串行口 不同型号MCS-51单片机CPU处理能力和指令系统完全兼容,只是存储器和I/O接口的配置有所不同。其中8051主要包括算术/逻辑部件ALU、累加器A、只读存储器ROM、随机存储器RAM、程序计数器PC、定时器/计数器、I/O接口电路等,还有堆栈寄存器SP等部件。这些部件集成在一块芯片上,通过内部总线连接,构成完整的微型计算机。 3.2复位电路 复位是单片机的初始化操作,只需给AT89C51的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位.复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。 除了进入系统的正常初始化之外,由于程序运行出错或操作错误而使系统处于死锁状态。为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。 在系统中,有时会出现显示不正常。为了调试方便,需要设计一个复位电路。AT89C51单片机复位电路共有上电复位、按键电平复位和按键脉冲复位。 本系统的复位电路主要完成系统的上电复位。复位电路可由简单的RC电路构成,也可使用其它的相对复杂,但功能更完善的电路。 本系统采用的电路工作原理是:上电瞬间,RC电路充电,RESET引脚端出现正脉冲,只要RESET保持10ms以上高电平,就能使单片机有效的复位。当时钟频率选用12MHz时,C取10uF,R取10KΩ,上电自动复位电路由上电瞬间C与R构成充电电路,RESET端的电位与电源Vcc相同,随着充电电流的减少,RESET的电位逐渐下降。RC时间常数越大,上电时RESET端保持高电平的时间越长,这组参数足以保证复位操作。若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运行。 复位电路: 3.3.晶振电路 晶振是为电路提供频率基准的元器件,晶振可以说是单片机的时钟,有着固定稳固的频率,是一个,没有它的话,估计单片机的程序会乱跑,也有可能运行不了,反正是不正常。通常分成有源晶振和无源晶振两个大类,无源晶振需要芯片内部有振荡器,并且晶振的信号电压根据起振电路而定,允许不同的电压,但无源晶振通常信号质量和精度较差,需要精确匹配外围电路(电感、电容、电阻等),如需更换晶振时要同时更换外围的电路。有源晶振不需要芯片的内部振荡器,可以提供高精度的频率基准,信号质量也较无源晶振要好。 因价格等因素,实际应用中多采用无源晶振设计的电路居多,除非电路设计时序极其敏感或芯片内部无振荡器的情况(如一些型号的DSP或精密仪器中)。 晶振电路: 3.4.显示电路 显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。 通常在显示上采用的方法一般包括两种:一种是静态显示,另一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。为了减少端口资源,降低电能消耗,我们采用的是动态显示方法。 显示电路:                 四.1602结构及工作原理 4.1 1602显示器的结构   所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 如图3.7所示。 字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样. 4.2 L1602引脚定义 4.3 控制器HD44780 HD44780内置了DDRAM、CGROM和CGRAM。           DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:         也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:                DDRAM地址与显示位置的对应关系               (事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H(从80H开始到9FH开始才是空余的自己编写空间其余的空间都有液晶自己的库文件。在CGRAM中)。         1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”            上表中的字符代码与我们PC中的字符代码是基本一致的。因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。PC在编译时就把“A”先转为41H代码了。           字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。   五.软件设计                   5.1程序设计 ******************************************************************************* *  描述:                LCD1602 滚动显示                                      * * 显示方式:                                                                  * * 1、从左到右逐字显示,闪动二次,清屏。                                        * * 2、再从右到左逐字显示,闪动二次,清屏。                                      * * 3、周期性地重复上述显示方式。                                                *                            ********************************************************************************/     #include     //51寄存器文件     #include         typedef unsigned char BYTE;    //用BYTE代替unsigned char (无符号字符)     typedef bit BOOL;  // 用BOOL代替bit         sbit LCD_RS = P2^6;  //复位端                sbit LCD_RW = P2^5;    //写数据端     sbit LCD_EP = P2^7;    //使能端         BYTE code dis1[] = {"  WELCOME  TO  "};     BYTE code dis2[] = {" 202.200.200.001 "};     BYTE code dis3[] = {"  OT  EMOCLEW  "};     BYTE code dis4[] = {" MOC.NIHCERP.WWW "}; /****************延时函数************************/        delay(int ms)     {                    //延时子程序     int i;     while(ms--)     {       for(i = 0; i< 250; i++)       {       _nop_();      //空执行       _nop_();       _nop_();       _nop_();       }     }     } /****************侧忙函数************************/            BOOL lcd_bz()     {                            BOOL result;     LCD_RS = 0;     LCD_RW = 1;     LCD_EP = 1;     _nop_();     _nop_();     _nop_();     _nop_();     result = (BOOL)(P0 & 0x80);    //检测P0最高位是否为1     LCD_EP = 0;     return result;//返回侧忙结果     } /****************写命令函数************************/        lcd_wcmd(BYTE cmd)     {                          // 写入指令数据到LCD     while(lcd_bz());     LCD_RS = 0;     LCD_RW = 0;     LCD_EP = 0;     _nop_();     _nop_();     P0 = cmd; //将8位指令通过P0口传给1602     _nop_();     _nop_(); //用于产生一个脉冲宽度     _nop_();     _nop_();     LCD_EP = 1;     _nop_();     _nop_();     _nop_();     _nop_();     LCD_EP = 0;      }         lcd_pos(BYTE pos)     {                          //设定显示位置     lcd_wcmd(pos | 0x80);     } /****************写数据函数************************/        lcd_wdat(BYTE dat)     {                  //写入字符显示数据到LCD     while(lcd_bz());     LCD_RS = 1;     LCD_RW = 0;     LCD_EP = 0;     P0 = dat;  //将8位数据通过P0口传给1602     _nop_();     _nop_();  //用于产生一个脉冲宽度     _nop_();     _nop_();     LCD_EP = 1;     _nop_();     _nop_();     _nop_();     _nop_();     LCD_EP = 0;     }         lcd_init()     {                  //LCD初始化设定     lcd_wcmd(0x38);    //16*2显示,5*7点阵,8位数据     delay(1);     lcd_wcmd(0x0c);    //显示开,关光标     delay(1);     lcd_wcmd(0x06);    //移动光标     delay(1);     lcd_wcmd(0x01);    //清除LCD的显示内容     delay(1);     } /****************主函数************************/        main()     {         BYTE i;         lcd_init();// 初始化LCD         delay(10);             while(1)                    {           lcd_wcmd(0x06);//向右移动光标           lcd_pos(0);//设置显示位置为第一行的第1个字符           i = 0;         while(dis1[ i ] != '\0')         {  //显示字符"WLCOME  TO"           lcd_wdat(dis1[ i ]);           i++;           delay(30);//控制两字之间显示速度         }           lcd_pos(0x40);//设置显示位置为第二行第1个字符           i = 0;         while(dis2[ i ] != '\0')         {           lcd_wdat(dis2[ i ]);//显示字符" WWW.PRECHIN.COM  "           i++;           delay(30);//控制两字之间显示速度         }           delay(800);//控制停留时间               lcd_wcmd(0x01);//清除LCD的显示内容           delay(1);           lcd_wcmd(0x04);//向左移动光标                   lcd_pos(15);//设置显示位置为第一行的第16个字符           i = 0;         while(dis3[ i ] != '\0')         {                //显示字符"WLCOME  TO"           lcd_wdat(dis3[ i ]);           i++;           delay(30);          //控制两字之间显示速度         }           lcd_pos(0x4F);      //设置显示位置为第二行的第16个字符           i = 0;         while(dis4[ i ] != '\0')         {           lcd_wdat(dis4[ i ]);  //显示字符" WWW.PRECHIN.COM  "           i++;           delay(30);      //控制两字之间显示速度         }           delay(800);      //控制停留时间               lcd_wcmd(0x01);  //清除LCD的显示内容           delay(200);      //控制两屏转换时间                     }     }     5.2 原理图 5.2仿真图 实物图 八.结束语 用单片机及有关电子元件设计的倒计时器类型很多,也有较多的实用电路参考。但具体电路结构要根据应用范围来进行有针对性的设计。应做到电路实用,结构简单,成本低廉,方便使用,定型稳的标准。应具有较强的可操作性 。 由于LCD的控制必须使用专用的驱动电路,而LCD面板的接线需要特殊技巧,且LCD面板比较脆弱,因此不会单独使用。本设计方案是将LCD面板,驱动与控制电路组合形成LCM,LCM与单片机相连接,形成一种省电的显示装置的一个起草,若有不成熟的地方,请老师指导,多谢。 九.参考文献 1. 张义和 《例说51单片机》人民邮电出版社。 2. 张志良 《单片机原理与控制技术》机械工业出版社。 3. 老杨 《51单片机工程师是怎样炼成的》电子工业出版社。                   文档已经阅读完毕,请返回上一页!
/
本文档为【基于51单片机的9999秒倒计时器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索