#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
/*端口定义*/
#define LCD_data P0
sbit LCD_RS=P3^5
sbit LCD_RW=P3^6
sbit LCD_EN=P3^4
sbit LCD_PSB=P3^7
uchar dis1[10]
uchar code dis2[]={"XXXXXXXXXXX@qq.com"}
uchar code dis3[]={"XXXXXXXX"}
uchar code dis4[]={"-------"}
void delay_ms(uint x)
{
int i,j
for(j = 0j <差巧 xj++)
{
for(i = 0i <110i++)
{
}
}
}
RS=L——表示DB0-DB7为显示指令数据
RW=L——表示DB0-DB7数据被write(当E=“H-L”,指令数据被写到IR或DR)
E=高脉冲
此时DB0-DB7=指令码 */
void write_cmd(uchar cmd)
{
LCD_RS=0
LCD_RW=0
LCD_EN=0
P0=cmd
delay_ms(5)
LCD_EN=1
delay_ms(5)
LCD_EN=0
}
/*设定显示位置*/
void lcd_pos(uchar X, uchar Y)
{
uchar pos
if(X == 0)
{
X = 0x80
}
else if(X == 1)
{
X = 0x90
}
else if(X == 2)
{
X = 0x88
}
else if(X == 3)
{
X = 0x98
}
pos = X + Y
write_cmd(pos) //显示地址
}
/*写显示数据到LCD*/
/*
RS=H ——表示尘困DB0-DB7为显示数据
RW=L ——RW=L,E='H-L',DB0-DB7数据被写到IR或DR
E=高脉冲
DB0-DB7=显示数据
*/
void write_dat(uchar dat)
{
LCD_RS=1
LCD_RW=0
LCD_EN=0
P0=dat
delay_ms(5)
LCD_EN=1
delay_ms(5)
LCD_EN=0
}
/*随机数发生函数*/
void randmaker()
{
uint ran
ran=rand()
dis1[0]=ran/10000+0x30
dis1[1]=ran%10000/1000+0x30
dis1[2]=ran%1000/100+0x30
dis1[3]=ran%100/10+0x30
dis1[4]=ran%10+0x30
ran=rand()
dis1[5]=ran/10000+0x30
dis1[6]=ran%10000/1000+0x30
dis1[7]=ran%1000/100+0x30
dis1[8]=ran%100/10+0x30
dis1[9]=ran%10+0x30
}
/*LCD初始化*/
void lcd_init()
{
LCD_PSB=1//并口方式
write_cmd(0x30)//基本 *** 派庆念作指令
delay_ms(5)
write_cmd(0x0c)//打开显示,光标关闭
delay_ms(5)
write_cmd(0x01)//清除LCD显示类容
delay_ms(5)
}
/*主程序*/
main()
{
uchar i
delay_ms(10)
lcd_init()
lcd_pos(1,0)
i=0
while(dis2[i]!='\0')
{
write_dat(dis2[i])
i++
}
lcd_pos(2,0)
i=0
while(dis3[i]!='\0')
{
write_dat(dis3[i])
i++
}
lcd_pos(3,0)
i=0
while(dis4[i]!='\0')
{
write_dat(dis4[i])
i++
}
while(1)
{
lcd_pos(0,0)
randmaker()
for(i=0i<10i++)
{
write_dat(dis1[i])
}
}
}
检查液晶屏察镇控制器的时序. *** 作命令卖没差码.初始化过程,还有硬件,上下拉电阻,既然中皮决定用并口,那么PSB就直接VDD,这样还能省一个IO口. 注意下面的程序中RS=0,RW=0,能同时为低吗? void write_command(uchar cmd){
check_busy()
rs=0
rw=0
en=0
P2=cmd
delay_4us()
en=1
delay_4us()
en=0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)