• LCD1602显示程序理解


      1 /*2018年8月11日 18点30分,于福安公寓
      2 功能:LCD1602显示程序*/
      3 #include<reg52.h>
      4 #define uchar unsigned char
      5 #define uint unsigned int
      6 uchar code table[] ="zhangshuaishuai";
      7 uchar code table1[] ="ce shi cheng xu";
      8 sbit lcdrw =P2^5;
      9 sbit lcdrs =P2^6;
     10 sbit lcde =P2^7;
     11 void delay(uchar x)
     12 {
     13     uchar i,j;
     14     for(i=x;i>0;i--)
     15         for(j=110;j>0;j--);
     16 }
     17 //显示程序的位置
     18 /*void lcd_display_char(uchar x,uchar y,uchar date)
     19 {
     20     uchar address;
     21     if(y ==1)
     22         address =0x80+x;
     23     else
     24         address =0xc0+x;
     25 }
     26 */
     27 /*写指令函数*/
     28 void lcd_write_cmd(uchar com)
     29 {
     30     lcdrs =0; //指令
     31     P0 = com;
     32     delay(1);
     33     lcdrw =0;//写有效
     34     lcde =1;  //由时序图可知,当lcde为高电平之前就必须要将数据输入进去,故而P0 = com;这句指令在其前面
     35     delay(1);
     36     lcde =0;
     37 
     38 }
     39 /*写数据函数*/
     40 void lcd_write_data(uchar date)
     41 {
     42     P0 =date;
     43     lcdrs =1;
     44     delay(1);
     45     lcdrw =0;
     46     lcde =1;
     47     delay(1);
     48     lcde =0;
     49 
     50 }
     51 // 函数初始化
     52 void init()
     53 {
     54     lcd_write_cmd(0x38);//设置8位格式;2行,5*7
     55     lcd_write_cmd(0x0c);//整体显示,关光标,不闪烁
     56 //    lcd_write_cmd(0x01); //清除屏幕显示
     57     lcd_write_cmd(0x06);//设定输入方式,增量不移位
     58 
     59     delay(1);
     60 }
     61 void main()
     62 {
     63     uchar i,j,num;
     64     init();
     65 
     66 /*    lcd_write_data(0x41);
     67     lcd_write_data('B');
     68     lcd_write_data('C');
     69     while(1);  //当这里没有while(1);暂停语句时,就会出现满屏的数据 ;当输入多个字符时,比如'B','C'如上面,就会面屏出现同样的数据,并且在这几个字符中轮流变化
     70 */
     71 
     72     lcd_write_cmd(0x80+0x13);  //确定刚开始写入第一行数据的位置
     73     for(i =0;i<15;i++)     //如果没有确定要显示的位置,LCd显示屏默认就会从第一个字符开始
     74     {
     75 //    lcd_display_char(0,0,table[i])
     76 
     77     lcd_write_data(table[i]);
     78         delay(100);
     79 
     80 //    while(1);  //如果在此处加上while(1)暂停语句时,就只会出现z这一个字符
     81     }
     82 //    lcd_write_cmd(0x01);  //  清屏指令   让上面的字符显示之后,再清屏   
     83 //    delay(1000);        //如果没有这个延时程序,那么下面显示的位置就不在你所设定的位置,会跑到第一行
     84              
     85     lcd_write_cmd(0x80+0x53);  //确定了下面要显示内容的位置     确定刚开始写入数据的位置
     86 
     87         for(j =0;j<15;j++)
     88         {
     89         lcd_write_data(table1[j]);
     90         delay(100);       //动态显示让其延时,相当于
     91         }
     92 
     93 
     94 /*用于整屏向左移动的程序    由于是整个屏幕的向左移动,故而在将其所有要显示的
     95 内容全部显示到不可见区域,然后统一按照移动屏幕的指令整体移动,每次移动也只移动一位*/
     96         for(num =0;num<18;num++)
     97         { 
     98             lcd_write_cmd(0x18);  //表示显示整屏向左移动
     99             delay(1000);        //    每个100ms移动一位
    100         }
    101 
    102         while(1); //如果在此处加上while(1)暂停语句时,会正常显示字符
    103 
    104 }
    View Code
  • 相关阅读:
    Jetty 的工作原理以及与 Tomcat 的比较
    基于Tengine的反向代理详细配置
    mysql定时脚本(event),类似oracle的job
    mysql 强制走索引
    如何检查mysql中建立的索引是否生效的检测方法及相关参数说明
    MySQL查询不使用索引汇总
    [大牛翻译系列]Hadoop 翻译文章索引
    [牛感悟系列]JAVA(1)理解JAVA垃圾回收
    [大牛翻译系列]Hadoop系列性能部分完结
    [大牛翻译系列]Hadoop(22)附录D.2 复制连接框架
  • 原文地址:https://www.cnblogs.com/wises/p/9539572.html
Copyright © 2020-2023  润新知