楼主错得不是一两处,抄的不认真,你对比一下就明白。
- #include<reg52.h>
- sbit LCD1602_RS=P2^4;
- sbit LCD1602_RW=P2^5;
- sbit LCD1602_EN=P2^6;
- //sbit LCD1602_DB=P0;
- <font color="#ff0000">#define LCD1602_DB P0</font>
- unsigned int i;
- unsigned char code shuzu1[]="1234567890123456";
- unsigned char code shuzu2[]="9876543210987654";
- void Read_Busy() //忙检测函数,判断bit7是0,允许执行;1禁止
- {
- unsigned char sta; //
- LCD1602_DB = 0xff;
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- do
- {
- LCD1602_EN = 1;
- sta = LCD1602_DB;
- LCD1602_EN = 0; //使能,用完就拉低,释放总线
- }while(sta & 0x80);
- }
- void Lcd1602_Write_Cmd(unsigned char cmd) //写命令
- {
- Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
- LCD1602_RS = 0;//RS数据命令选择RS=1数据 RS=0命令
- LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
- LCD1602_DB = cmd;//命令放到P0(假设)上
- LCD1602_EN = 1;//*****************使能信号 =1开始工作
- LCD1602_EN = 0; //*****************使能信号 =1开始工作
- }
- void Lcd1602_Write_Data(unsigned char dat) //写数据
- {
- Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
- LCD1602_RS = 1;//RS数据命令选择RS=1数据 RS=0命令
- LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
- LCD1602_DB = dat;//数据放到P0(假设)上
- LCD1602_EN = 1;//使能开
- LCD1602_EN = 0;//使能关
- }
- void InitLcd1602() //1602初始化 共5组初始化寄存器
- {
- Lcd1602_Write_Cmd(0x38); //打开,5*8,8位数据 00111000
- Lcd1602_Write_Cmd(0x0c); //00001100后三位表示 开显示 不显光标 光标不闪烁
- Lcd1602_Write_Cmd(0x06); //00000110 //写一个字符后地址指针加一
- Lcd1602_Write_Cmd(0x01); //清屏
- }
- //viod main()
- <font color="#ff0000">void main()</font>
- {
- InitLcd1602();
- <font color="#ff0000"> Lcd1602_Write_Cmd(0x80);</font>
- // for(i = 0; i < 16; i++);
- <font color="#ff0000"> for(i = 0; i < 16; i++)</font>
- {
- Lcd1602_Write_Data(shuzu1[i]);
- }
- // void Lcd1602_Write_Cmd(0x80+0x40);
- <font color="#ff0000"> Lcd1602_Write_Cmd(0x80+0x40);</font>
- // for(i = 0; i < 16; i++);
- <font color="#ff0000"> for(i = 0; i < 16; i++)</font>
- {
- Lcd1602_Write_Data(shuzu2[i]);
- }
- while(1);
- }
复制代码
|