单片机LCD1602
# include<reg52.h>
# include<intrins.h>
sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_E = P2^7;
void delay15ms();
void delay5ms();
void delay10ms();
void LCD1602_Init(void);
void LCD1602_Write_Cmd(unsigned char Cmd);
void LCD1602_Write_Data(unsigned char Data);
main(void)
{
LCD1602_Init();//初始化
LCD1602_Write_Cmd(0x0f+0x80);//确定显示地址
LCD1602_Write_Data('A');//确定显示内容
while(1);
}
//LCD1602初始化
void LCD1602_Init()
{
LCD1602_Write_Cmd(0x38);//显示模式设置
LCD1602_Write_Cmd(0x0c);//显示开及光标设置
LCD1602_Write_Cmd(0x06);//显示光标移动设置
LCD1602_Write_Cmd(0x01);//显示清屏
}
//写命令
void LCD1602_Write_Cmd(unsigned char Cmd)
{
// LCD1602_Busy_Check();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_E = 0;
P0 = Cmd;
_nop_();
LCD1602_E = 1;
_nop_();
LCD1602_E = 0;
_nop_();
}
//写数据
void LCD1602_Write_Data(unsigned char Data)
{
LCD1602_Busy_Check();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_E = 0;
P0 = Data;
_nop_();
LCD1602_E = 1;
_nop_();
LCD1602_E = 0;
_nop_();
}
//忙信号检测
void LCD1602_Busy_Check(unsigned char temp);
{
P2 = 0xff;
do{
LCD1602_RS = 0;
LCD1602_RW = 1;
LCD1602_E = 0;
LCD1602_E = 1;
_nop_();
temp = P2;
_nop_();
LCD1602_E = 0;
_nop_();
}while(temp & 0x80);
}
void delay15ms()
{
unsigned char i, j;
i = 27;
j = 226;
do
{
while(--j);
} while(--j);
}
void delay5ms()
{
unsigned char i, j;
i = 9;
j = 244;
do
{
while(--j);
} while(--j);
}
void delay10ms()
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while(--j);
} while(--j);
}
这个程序,在51单片机上始终只显示第一行,第二行黑块没有,弄了一下午了,求大神帮忙。然后RS,RW,E也没接错,看了很多遍了。谢谢
main(void)
{
LCD1602_Init();//初始化
LCD1602_Write_Cmd(0x0f+0x80);//确定显示地址
LCD1602_Write_Data('A');//确定显示内容
while(1);
}
这里的第二行代码确定地址不对吧,第一行是16个字符那就是0X80+(0X00~0X0F),如果要显示到第二行,地址应该是0X80+(0X10~0X1F),你改下试试
下一篇:.将某个十进制数n(n
上一篇:编程API监控关机操作