
必要 *** 作:正确连接1602
*/
#include<reg51.h>
#define uint unsigned int //定义常用数据类型替代码
#define uchar unsigned char
#define dat P0 //定义LCD1602的数据口为P0
sbit rs=P1^0 //定义RS口为P10
sbit rw=P1^1 //定义RW口为P11
sbit e=P1^2 //定义E口为P12
uchar busy //1602判忙标志
void delay_1ms(void) //延时程序
void display(void) //显示程序
void busy_1602(void) //液晶查忙程序
void shj_1602(uchar a)//液晶写数据程序
void int_1602(void) //液晶初始化
void zhl_1602(uchar a)//液晶写指令程序
void main(void) //主程序开始
{
for()
{
display()//在大循环内调用显示函数,一直显示
}
}
void delay_1ms(void)//延时程序
{
uchar i,j
for(i=0i<10i++)
for(j=0j<20j++)
}
void display(void) //液晶显示程序
{
uchar i //定义计数值
uchar table0[16]={"Hello bin MCU! "} //定义LCD1602显示2行的字符
uchar table1[16]={"--chen qi bin "}
int_1602() //初始化1602
zhl_1602(0x80)//写指令
for(i=0i<16i++)//发送数据第一行
{
shj_1602(table0[i])
}
zhl_1602(0xc0)
for(i=0i<16i++)//发送数据第二行
{
shj_1602(table1[i])
}
}
void busy_1602(void)//查询忙碌标志信号程序
{
do
{
e=0
rw=1//高电平读 *** 作
rs=0//指令
e=1
busy=dat
e=0
delay_1ms()
} while(busy&&0x10==1) //忙就一直读,此读忙是读的DB7 do while 用法是当while里面成立时就一直do
}
void zhl_1602(uchar a)//写指令到LCM程序 写数据写指令前都需要查忙
{
busy_1602()
e=0
rw=0
rs=0
e=1
dat=a //e=1变为e=0下降沿写入
e=0
}
void shj_1602(uchar a)//写数据到LCM程序 LCM为液晶显示模块
{
busy_1602()
e=0
rw=0//低电平写 *** 作
rs=1//数据
e=1
dat=a
e=0
}
void int_1602(void) //启动LCM程序 初始化LCD
{
zhl_1602(0x38) //显示模式设置
zhl_1602(0x0c)//显示开关光标设置
zhl_1602(0x06)
}
#include<reg52.h>#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^1
sbit RW = P2^2
sbit E = P2^3
uchar idata wlcome[16]={"asdfghjklpoiuytr"}
uchar idata lcdtimer[16]={"qwertyuioplkjhgf"}
void delayus(uint a)//微秒延时//
{
while(a--)
}
void delay(uint dell)//毫秒延时//
{
uchar x
for(delldell>0dell--)
for(x=110x>0x--)
}
void wr_com(uchar temp)//写指令//0
{
RS=0
RW=0
P0=temp
E=1
E=0
}
void wr_data(uchar num)//写数据//
{
RS=1
RW=0
P0=num
E=1
E=0
}
void disp_lcd(uchar addr,uchar *templ)
{
uchar i
wr_com(addr)
delay(50)
for(i=0i<16i++)
{
wr_data(templ[i])
delay(50)
}
}
void lcd_init()//初始化液晶//
{
wr_com(0x30)
delay(50)
wr_com(0x38)
delay(50)
wr_com(0x01)
delay(50)
wr_com(0x06)
delay(50)
wr_com(0x0c)
delay(50)
}
void main()
{
lcd_init()
while(1)
{
disp_lcd(0x80,wlcome)
disp_lcd(0xc0,lcdtimer)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)