51单片机之LCD1602的驱动程序

发布者:温柔微笑最新更新时间:2018-06-25 来源: eefocus关键字:51单片机  LCD1602  驱动程序 手机看文章 扫描二维码
随时随地手机看文章
  1. #include   

  2. #include "./delay/delay.h"  

  3.   

  4. #define LCDPORT P0  

  5. #define LCD_WRITE_DATA   1  

  6. #define LCD_WRITE_COM    0  

  7. sbit RS = P2^4;  

  8. sbit RW = P2^5;  

  9. sbit E = P2^6;  

  10. unsigned char flag = 1;  

  11. unsigned char shi = 23, fen = 59, miao = 50;  

  12.   

  13. void lcd1602_write(unsigned char byte, unsigned char flag)  

  14. {  

  15.         if(flag)  

  16.         {  

  17.                 RS = 1;                    //选择输入的数据为数据  

  18.         }  

  19.         else  

  20.         {  

  21.                 RS = 0;                      //选择输入的数据为命令  

  22.         }  

  23.         RW = 0;                           //写  

  24.         E = 1;                            //选中lcd  

  25.         LCDPORT = byte;  

  26.         delay_ms(5);  

  27.         E = 0;                          //失能LCD      高电平有效  

  28.           

  29. }  

  30.   

  31. void lcd_init()  

  32. {  

  33.         delay_ms(15);  

  34.       lcd1602_write(0x38,LCD_WRITE_COM);     //设置8位数据接口,两行指令,5*8点阵字符  

  35.       delay_ms(5);  

  36.       lcd1602_write(0x38,LCD_WRITE_COM);  

  37.       delay_ms(5);  

  38.       lcd1602_write(0x38,LCD_WRITE_COM);  

  39.       delay_ms(5);  

  40.       lcd1602_write(0x38,LCD_WRITE_COM);  

  41.       delay_ms(5);  

  42.       lcd1602_write(0x08,LCD_WRITE_COM);            //关闭显示,关闭光标和闪烁  

  43.       delay_ms(5);  

  44.       lcd1602_write(0x01,LCD_WRITE_COM);          //清屏  

  45.       delay_ms(5);  

  46.       lcd1602_write(0x06,LCD_WRITE_COM);        //设置指针方式,画面不平移  

  47.       delay_ms(5);  

  48.       lcd1602_write(0x0c,LCD_WRITE_COM);        //设置指针方式,画面不平移  

  49.       delay_ms(5);  

  50. }  

  51. void lcd_dis_char(unsigned char x, unsigned char y, unsigned char *s)  

  52. {  

  53.         if(0 == x)  

  54.         {  

  55.              lcd1602_write(y + 0x80,LCD_WRITE_COM);  

  56.                

  57.         }  

  58.         else if(1 == x)  

  59.         {  

  60.              lcd1602_write(y + 0xc0,LCD_WRITE_COM);  

  61.         }  

  62.         while(*s)  

  63.         {  

  64.               

  65.             lcd1602_write(*s, LCD_WRITE_DATA);  

  66.             s++;  

  67.         }  

  68. }  

  69.   

  70. void time0_init()  

  71. {  

  72.         EA = 1;  

  73.       TMOD |= 0x01;  

  74.       TH0 = (65536 - 20000) / 255;  

  75.       TL0 = (65536 - 20000) % 255;  

  76.       ET0 = 1;  

  77.       TR0 = 1;  

  78. }  

  79.   

  80. void time0_isr() interrupt 1  

  81. {  

  82.       static unsigned char i = 0;  

  83.         TH0 = (65536 - 20000) / 255;  

  84.       TL0 = (65536 - 20000) % 255;  

  85.       i++;  

  86.       if(50 == i)  

  87.         {  

  88.                 i = 0;  

  89.               miao++;  

  90.               if(60 == miao)  

  91.                 {  

  92.                         miao = 0;  

  93.                       fen++;  

  94.                       if(60 == fen)  

  95.                         {  

  96.                                 fen = 0;  

  97.                               shi++;  

  98.                               if(24 == shi)  

  99.                                 {  

  100.                                         shi = 0;  

  101.                                 }  

  102.                         }  

  103.                 }  

  104.         }  

  105. }  

  106.   

  107. void lcd_diaplay_time()      //时间的显示函数  

  108. {  

  109.         lcd1602_write(0x80 + 7, LCD_WRITE_COM);  

  110.       lcd1602_write((shi / 10) + 0x30,LCD_WRITE_DATA);  

  111.       lcd1602_write((shi % 10) + 0x30,LCD_WRITE_DATA);  

  112.         lcd1602_write(':',LCD_WRITE_DATA);  

  113.         lcd1602_write((fen / 10) + 0x30,LCD_WRITE_DATA);  

  114.         lcd1602_write((fen % 10) + 0x30,LCD_WRITE_DATA);  

  115.         lcd1602_write(':',LCD_WRITE_DATA);  

  116.         lcd1602_write((miao / 10) + 0x30,LCD_WRITE_DATA);  

  117.         lcd1602_write((miao % 10) + 0x30,LCD_WRITE_DATA);  

  118.           

  119. }  

  120.   

  121. void lcd_dis_hex()        //显示字符或数字  

  122. {  

  123.         unsigned char temp = 0x2b;  

  124.       lcd1602_write(0x80,LCD_WRITE_COM);  

  125.       lcd1602_write((temp / 16) + 0x30,LCD_WRITE_DATA);  

  126.       lcd1602_write((temp % 16) + 0x37,LCD_WRITE_DATA);  

  127. }  

  128.   

  129.   

  130.   

  131. void main()  

  132. {  

  133.       time0_init();  

  134.     lcd_init();  

  135.       lcd_dis_hex();  

  136.        

  137.   

  138.         lcd_dis_char(0,2,"time:");  

  139.   

  140.       while(1)  

  141.         {             

  142.                     lcd_diaplay_time();  

  143.                       

  144.                                

  145.         }  

  146.       

  147. }  



关键字:51单片机  LCD1602  驱动程序 引用地址:51单片机之LCD1602的驱动程序

上一篇:51单片机的LCD显示
下一篇:基于51单片机的LCD1602液晶驱动实现

推荐阅读最新更新时间:2024-03-16 16:06

51单片机FFT运算转换程序 adc数据
#include STC12C5A.H #define uchar unsigned char #define uint unsigned int #define channel 0x01 //设置AD通道为 P1.1 //--------------------------------------------------------------------- sbit SDA_R=P1^2; sbit SDA_R_TOP=P1^3; sbit SDA_G=P1^4; sbit SDA_G_TOP=P1^5; sbit STCP=P1^6; sbit SHCP=P1^7;
[单片机]
基于51单片机的两路温度控制器的设计方案
  1.引言   目前,温度控制器存在的问题是如何缩减成本,减少功耗,温度测量的准确性和多路温度的同时显示。本方案设计的实现基于C51单片机的两路温度控制器,做到成本最低化,精确度高,两路温度的显示和控制,能在温度超出设定的最高温度时启动电风扇进行降温,在温度低于设定的最低温度时启动蜂鸣器报警,能够用户设定最高最低温。   2.系统结构   温度控制器系统包括以下几个主要部分:温度传感器,报警电路,LED显示电路,键盘控制,89C51控制部分。如图所示:   本系统设计实现:启动温度控制器后,绿灯亮起,四位LED数码显示器上前两位为温度传感器1所测的环境温度,后两位为温度传感器2所测的环境温度。   3.硬件结构
[单片机]
基于<font color='red'>51单片机</font>的两路温度控制器的设计方案
51单片机特殊功能寄存器有哪些_功能是什么
  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   51单片机特殊功能寄存器   1、21个寄存器介绍   51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和串口通信模块(串行I/O口
[单片机]
<font color='red'>51单片机</font>特殊功能寄存器有哪些_功能是什么
从零开始51单片机教程 —— 16 单片机位操作指令
前面那些流水灯的例程,我们已经习惯了 位 一位就是一盏灯的亮和灭,而我们学的指令却全都是用 字节 来介绍的:字节的移动、加法、减法、逻辑运算、移位等等。用字节来处理一些数学问题,比如说:控制冰箱的温度、电视的音量等等很直观,能直接用数值来表在。可是如果用它来控制一些开关的打开和合上,灯的亮和灭,就有些不直接了,记得我们上次课上的流水灯的例程吗?我们知道送往P1口的数值后并不能马上知道哪个灯亮和来灭,而是要化成二进制才知道。工业中有很多场合需要处理这类开关输出,继电器吸合,用字节来处理就显示有些麻烦,所以在8031单片机中特意引入一个位处理机制。 位寻址区 在8031中,有一部份RAM和一部份SFR是具有位寻址功能的,也就是说
[单片机]
基于51单片机的超声波测距模块设计
超声波测距的模块,51单片机接上12864液晶,HC-SR04超声波模块,就可以了,具体程序没怎么看,超声波模块的硬件也不晓得。 超声波测距51单片机12864液晶显示源程序: #include #include //引脚定义 sbitRX=P1 ^ 1; sbitTX=P1 ^ 2; sbitCS=P3 ^ 3;//片选 高电平有效 单片LCD使用时可固定高电平 sbitSID=P3 ^ 4;//数据 sbitSCLK=P3 ^ 5;//时钟 //Function Definition 函数声明 void Delay(int num); void Init_DS18B20(void); unsigned char ReadO
[单片机]
51单片机入门——单片机最小系统
1.什么是最小系统 单片机最小系统也称为单片机最小应用系统,是指使用最少的原件组成单片机可以工作的系统。 2.最小系统的三要素 单片机最小系统的三要素为:电源、晶振和复位电路。 2.1.电源 任何电子设备都需要供电,目前主流单片机的电源分别为5V和3.3V这两个标准。 选用STC89C52,它需要5V的供电系统,上图是使用USB口输出的5V直流直接供电的,从图中可以看出,供电电路在40引脚和20引脚的位置上,40引脚接的是+5V,通常也称为VCC或VDD,代表电源正极,20引脚接GND,代表电源负极。 2.2.晶振 晶振,又叫晶体振荡器,从这个名字上就可以看出,它注定一生都要不停的振荡。它起到的作用是为单片机系统提
[单片机]
<font color='red'>51单片机</font>入门——单片机最小系统
AT89S51单片机的定时/计数器T0的应用
1.实验任务 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示 2.电路原理图 图4.15.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2).把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9
[单片机]
AT89S<font color='red'>51单片机</font>的定时/计数器T0的应用
AT89C2051单片机制作的六位数显多路定时电子钟
这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片IC实现。 一片20引脚的单片机STC2032(引脚排列与AT89C2051完全相同)为电子钟主体,其显示笔画数据从P1口分时输出,P3口则输出对应的六位选通信号。由于LED数码管点亮时耗电较大,故不能使用AT89C2051单片来完成,但是可以可以用STC89C2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。 本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键K1、加调整键K2、减调整键K3。由于STC89C2032内部已经集成有复位电阻,所以,
[单片机]
AT89C20<font color='red'>51单片机</font>制作的六位数显多路定时电子钟
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved