我觉得主函数那里发数据有误,楼主可以参考一下我用过的驱动程序!- #include <reg52.h>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD1602_data P0
- sbit LCD1602_RS=P2^6;
- sbit LCD1602_RW=P2^5;
- sbit LCD1602_EN= P2^7;
- void LCD1602_Init();
- void LCD1602_Write_cmd(uchar cmd);
- void LCD1602_Write_data(uchar dat);
- void LCD1602_display();
- uchar code table0[]="STC";
- uchar code table1[]="ARM";
- void delay(uint a)
- {
- uint i,j;
- for (i=a;i>0;i--)
- for (j=110;j>0;j--);
- }
- void LCD1602_Write_cmd(uchar cmd)//写指令函数
- {
- LCD1602_RS=0;//写指令
- LCD1602_RW=0;//写操作
- LCD1602_data=cmd;
- delay(5);
- LCD1602_EN=1;
- LCD1602_EN=0;
- }
- void LCD1602_Write_data(uchar dat)//写数据函数
- {
- LCD1602_RS=1;//写数据
- LCD1602_RW=0;//写操作
- LCD1602_data=dat;
- delay(5);
- LCD1602_EN=1;
- LCD1602_EN=0;
- }
- void LCD1602_Init()
- {
- LCD1602_Write_cmd(0x38);//8位数据,双列,5X7字形
- LCD1602_Write_cmd(0x0c);//开启显示屏,关光标,光标不闪烁
- LCD1602_Write_cmd(0x06);//显示地址递增,即写一个数据后,显示位置右移一位
- LCD1602_Write_cmd(0x01);//清屏
- }
- void LCD1602_display(void)//显示函数
- {
- uchar a,b;
- LCD1602_Init();
- LCD1602_Write_cmd(0x80);
- for(a=0;a<3;a++)
- {
- LCD1602_Write_data(table0[a]);
- delay(200);
- }
- LCD1602_Write_cmd(0x80+0x40);
- for(b=0;b<3;b++)
- {
- LCD1602_Write_data(table1[b]);
- delay(200);
- }
- }
- void main()
- {
- LCD1602_Init();
- LCD1602_display();
- while(1);
- }
复制代码
|