历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2018年06月25日 | 51单片机之LCD1602的驱动程序

2018-06-25 来源:eefocus

  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. }  



推荐阅读

史海拾趣

Cincon公司的发展小趣事

进入21世纪,Cincon对质量与环保的重视日益凸显。2001年和2002年,公司的台湾工厂分别获得了ISO 9001和ISO 14001认证,这标志着公司在质量管理和环境保护方面达到了国际标准。随后,Cincon中国工厂也于2009年获得了ISO 14001认证,进一步证明了公司对环保责任的承诺。

DMC Tools公司的发展小趣事

DMC Tools公司深知质量是企业的生命线。因此,公司建立了严格的质量管控体系,从原材料采购到生产加工、再到产品检验,每一个环节都严格把关。这种对质量的执着追求使得DMC Tools公司的产品赢得了客户的广泛信任。许多知名电子企业都选择DMC Tools公司作为他们的长期合作伙伴,这也为公司的发展奠定了坚实的基础。

Component General Inc公司的发展小趣事

Component General Inc公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料的采购到产品的生产、检测、包装等每一个环节都进行严格把控。这种对品质的执着追求,使得公司的产品赢得了客户的广泛信任和好评。

American Power Devices Inc公司的发展小趣事

在电子行业的初期,APD公司凭借其卓越的技术研发团队,成功开发出了一款高效能的电源管理芯片。这款芯片以其低能耗、高稳定性等特点迅速获得了市场的认可。随着技术的不断迭代和更新,APD持续投入研发,推出了一系列具有竞争力的产品,逐渐在电源管理领域树立了领先地位。

ABI Electronics公司的发展小趣事

ABI Electronics公司深知研发实力是企业发展的核心竞争力。因此,公司不断加大对研发的投入,引进了一批高素质的研发人才,建立了完善的研发体系。通过与高校、科研机构等合作,ABI不断吸收新的技术和知识,推动产品的升级换代,保持了在行业内的技术领先地位。

Bourns公司的发展小趣事

随着公司的不断发展,Bourns在1952年取得了世界上第一个可调式电阻的专利,即TrimpotR。这一技术突破标志着Bourns在电子元器件领域的领先地位,也为公司的产品线增添了核心竞争力。可调电阻的广泛应用推动了Bourns在电子行业的快速发展。

问答坊 | AI 解惑

低压大电流开关电源的设计

1 引言       为了以更低的功耗获得更高的速度和更佳的性能,要求电源电压越来越低,瞬态性能指标越来越高,因此对开关电源提出了越来越高的要求。用原有的电路拓扑及整流方式已不能满足现在的要求,为了适应IC芯片发展的需要,人们开始研 ...…

查看全部问答>

如何成为一个优秀的模电设计师

请大家说说如何成为一个优秀的模电设计师,现在又做业务又做工程,累呀,总觉得知识更新不够快,跟不上形势。…

查看全部问答>

中国安全防范产品的山寨化是福还是祸?

今年的两会即将召开之际,让我想起去年此时火速蹿红的“山寨”一词。“山寨”一词在2009年3月就被带上了两会,并且再度火了一把, 与“躲猫猫”一起位列热门关键词前二位。     山寨机概念首先出现在IT行业。自从2001年始“联发科”先后在 ...…

查看全部问答>

急切求助,开关电源烧上mos管

现象描述  1 用万用表测量VCC_1V2电源对地阻抗5欧左右。 2 刚上电mos管Q5就被烧掉。 3 断开R272,在R272的第2pin和地之间并一个电容,上电不会烧mos管,但是输出电压为3V。 4  Vous+通过飞线链接到电源输出端 输出电压稳定 ...…

查看全部问答>

FPGA电源芯片的选择

FPGA电源芯片的选择:         FAPGA 电源芯片一般分为内核电源和IO电源。 怎样选择电源芯片的功耗大小这是一门学问。 电源芯片的大小跟所使用的逻辑门容量和速度都有关。速度越快,功耗需求越大。逻辑容量越大 ...…

查看全部问答>

HT1622的使用问题,望牛人告知!

硬件结构图 这是我的源代码: #include #include typedef unsigned char byte; typedef unsigned int byte2; typedef unsigned long byte4; typedef byte bool; #define TRUE 1 #define FALSE 0 sbit CS = P0^0; sbit WR_CLK = P0^1; sbit ...…

查看全部问答>

WINCE的内存没有被收回

我写了一个在WINCE(5.0)下运行MFC程序,里面我用new分配了一个空间,然后用delete 释放,可是内存并没有被收回(通过看控制面板里的系统属性,总共内存数和使用内存数)?  代码如下: vector vct5();         fo ...…

查看全部问答>

如何查看WINCE 主频?

我用的是YLP2440的开发板,通过CE\\windows\\cpucheck.exe查看FCLK=200M。我在BSP中看到的MPLLCON=0X5C011,计算出来的FCLK=400。请问该板子FCLK究竟是多少?如果需要更改的话,是不是改BSP中MPLLCON就可以了?…

查看全部问答>

STR712不能在RAM中调试吗?所给例程都是在Flash中调试的吗?

                                 如果用ST的ARM只能买J-link吗?…

查看全部问答>

毕业设计所需:请推荐串口接收数据能图像显示的软件

我的毕业设计是DS18B20温度传感 + nRF24L01无线数传 + 232串口发送给PC + 上位机显示但是,师兄的要求是要图表形式显示温度变化串口助手见得多了,找一个也不费事。但是好像就没见过能用图表显示的。最开始的打算是自己把当初上课学过的LABVIEW重新 ...…

查看全部问答>