C51+led1602

代码

  1 #include <reg51.h>
  2 #include <intrins.h>
  3 #define uchar unsigned char
  4 #define uint unsigned int
  5 #define out P0
  6 
  7 /*
  8 RS:寄存器选择输入端
  9 RS=1:指向数据寄存器
 10 RS=0:指向指令寄存器
 11 
 12 RW:读写控制输入端
 13 RW=0:写操作 RW=1:读操作
 14 
 15 E:使能信号输入端
 16 读操作时,高电平有效;
 17 写操作时,下降沿有效;
 18 */
 19 sbit RS=P2^0;        //位变量;输出端RS作用是存放控制信息,体现当前指令执行寄存器结果的各种状态信息,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
 20 sbit RW=P2^1;        //位变量;输出端RW作用是读写信号,,高电平1时进行读操作
 21 sbit E=P2^2;        //位变量;输出端E作用是作为输入引脚,,只有该引脚激活,芯片才能工作,通常情况下为高电平有效,若符号负跳变时,则表示低电平有效。
 22 void lcd_initial(void);            //led1602初始化函数
 23 void check_busy(void);            //检查忙标志函数????
 24 void write_command(uchar com);    //写命令函数
 25 void write_date(uchar dat);        //写数据函数
 26 void string(uchar ad,uchar *s);    //显示字符串函数
 27 void delay(uint);                   //延时函数
 28 
 29 void main (void)
 30 {
 31     lcd_initial();                //调用初始化函数。
 32     while(1)
 33     {
 34         string(0x82,"wo ai nan jing");              //第一行显示
 35         string(0xC3,"2021/11/15");    //第二行显示
 36         delay(100);                        //延时
 37         write_command(0x01);            //写清屏函数
 38         delay(100);                        //延时
 39     }
 40 }
 41 
 42 
 43 //延时函数
 44 void delay(uint j)             //1ms的延时函数,j=?
 45 {
 46     uchar i=250;
 47     for(;j>0;j--)
 48     {
 49         while(--i);
 50         i=249;
 51         while(--i);
 52         i=250;
 53     }
 54 }
 55 
 56 
 57 void check_busy(void)            //检查忙标志函数
 58 {
 59     uchar dt;
 60     do
 61     {
 62         dt=0xff;
 63         E=0;
 64         RS=0;
 65         RW=1;
 66         E=1;
 67         dt=out;
 68     }
 69     while (dt&0x80);        //
 70     E=0;
 71 }
 72 
 73 //写命令函数
 74 void write_command(uchar com)
 75 {
 76     check_busy();
 77     E=0;
 78     RS=0;
 79     RW=0;
 80     out=com;
 81     E=1;
 82     _nop_();
 83     E=0;
 84     delay(1);
 85 }
 86 
 87 //显示数据函数
 88 void write_data(uchar dat)
 89 {
 90     check_busy();
 91     E=0;
 92     RS=1;
 93     RW=0;
 94     out=dat;
 95     E=1;
 96     _nop_();
 97     E=0;
 98     delay(1);
 99 }
100 
101 //led1602 液晶初始化
102 void lcd_initial (void)
103 {
104     write_command(0x38);        //8位两行字符 全部显示
105     _nop_();
106     write_command(0x0c);       //开整体显示,光标关,无闪烁
107     _nop_();
108     write_command(0x06);       //光标右移
109     _nop_();
110     write_command(0x01);       //清屏
111     _nop_();
112     delay(1);
113 }
114 
115 void string(uchar ad,uchar *s)
116 {
117     write_command(ad);
118     while(*s>0)
119     {
120         write_data(*s++);
121         delay(100);
122     }
123 }

 

截图

C51+led1602

 

上一篇:设计分享|单片机电压表模拟


下一篇:CC2530基础实验三:Uart