写出来的程序又如何验证是否正确?
其实,你只需要对LCD的打开、关闭,以及能把一个数据块显示在LCD上就行了
“常见字母、数字、符号、中文、自定义字符、图形,以及文字和图形混和显示;光标显示/隐藏(Cursor
on/off)、显示字符闪烁(Display
character
blink);画面清除(Display
clear)、光标归位(Return
home)”
这些功能,只需要在这个数据块上进行操作,然后再送到LCD显示。
//51单片机驱动ST7070控制16*2的字符型LCD#include <reg52.h>
sbit RS = P3^2
sbit R_W = P3^3
sbit EN = P3^4
sbit busy=P1^7
sbit Auto=P3^6
sbit step=P3^7
void write_command(char)
void write_data(char)
void delay_s(int)
void delayms(int)
unsigned char checkbusy(void)
void scan(void)
void madefont(void)
void money(void)
void abcd(void)
void number(void)
void picure(void)
void white(void)
void black(void)
void snow(void)
void hoi(void)
void hline(void)
void vline(void)
void net(void)
void frame(void)
void main(void)
{
delay_s(40)
// write_command(0x20)
// write_command(0x20)
write_command(0x38)// FUNCTION SET
delay_s(10)
write_command(0x38) //FUNCTION SET
delay_s(2)
write_command(0x38) //FUNCTION SET
delay_s(2)
write_command(0x28) //FUNCTION SET
delay_s(2)
write_command(0x28) //FUNCTION SET
delay_s(2)
write_command(0x0c)//Display on
delay_s(10)
write_command(0x01)//Clear Display
delay_s(10)
write_command(0x06)// entry mode set
delay_s(10)
// write_command(0x0c)//display on
//delay_s(2)
// write_command(0x01)//CLEAR display
//delay_s(2)
write_command(0x2C) //FUNCTION SETC EXT=1
delay_s(2)
write_command(0x04)//bias resistor set,External bias resistor select.
delay_s(2)
checkbusy()
money()
delay_s(200)
scan()
checkbusy()
abcd()
delay_s(200)
scan()
checkbusy()
number()
delay_s(200)
scan()
checkbusy()
picure()
delay_s(200)
scan()
checkbusy()
white()
delay_s(200)
scan()
checkbusy()
black()
delay_s(200)
scan()
checkbusy()
snow()
delay_s(50)
scan()
checkbusy()
hoi()
delay_s(200)
scan()
madefont() //造字
delay_s(200)
checkbusy()
hline()
delay_s(200)
scan()
checkbusy()
vline()
delay_s(200)
scan()
checkbusy()
net()
delay_s(200)
scan()
checkbusy()
frame()
delay_s(200)
scan()
}
void write_command(char comm)
{ RS = 0
R_W = 0
EN = 1
P1=comm&0xf0
delayms(1)
EN = 0
EN=1
comm<<=4
P1=comm&0xf0
EN=0
}
void write_data(char dda)
{ RS = 1
R_W = 0
EN = 1
P1=dda&0xf0
delayms(1)
EN = 0
EN=1
dda<<=4
P1=dda&0xf0
EN=0
}
void delay_s(int c)
{int i,j
for (i = 0i<=ci++)
for ( j = 1j<=1000j++)
}
void delayms(int c1)
{int i,j
for (i = 0i<=c1i++)
for ( j = 1j<=50j++)
}
unsigned char checkbusy(void) //检测 BF
{
busy=0x01
RS = 0
R_W = 1
EN = 0
EN = 1
while(busy)//当BUSY=1时,不断循环,当BUSY=0时,开始执行下一条指令.
return(busy)
}
void madefont(void) //造字
{
int i,j
write_command(0x40)
for(i=0i<4i++) //HLINE,CODE=00H
{
write_data(0x1f)
write_data(0x00)
}
for(i=0i<8i++) //VLINE ,code=01h
{
write_data(0x15)
}
for(i=0i<4i++) //net,CODE=02H
{
write_data(0x15)
write_data(0x0a)
}
for(i=0i<1i++) //Frame,CODE=03H
{
write_data(0x1f)
for(j=0j<6j++)
{
write_data(0x11)
}
write_data(0x1f)
}
}
void scan(void)
{
while(step==1&Auto==0)
{
delay_s(5)
}
if(step==0)
{
delay_s(5)
while(step==0)
{
delay_s(5)
}
delay_s(5)
}
else if(Auto==1)
{
delay_s(5)
}
delay_s(5)
write_command(0x01)
}
void money (void)
{
int i,j
write_command(0x80)
for(i=0i<2i++)
{
for(j=0j<1j++)
{
write_data(0xB1)
write_data(0xB2)
write_data(0xB3)
write_data(0xB4)
write_data(0xB5)
write_data(0xB6)
write_data(0xB7)
write_data(0xB8)
write_data(0xB9)
write_data(0xBA)
write_data(0xBB)
write_data(0xBC)
write_data(0xB1)
write_data(0xBE)
write_data(0xBF)
write_data(0xC0)
write_data(0xD1)
write_data(0xD2)
write_data(0xD3)
write_data(0xD4)
write_data(0xD5)
write_data(0xD6)
write_data(0xD7)
write_data(0xD8)
write_data(0xD9)
write_data(0xDA)
write_data(0xDB)
write_data(0xDC)
write_data(0xD1)
write_data(0xDE)
write_data(0xDF)
write_data(0xE0)
}
}
}
void abcd (void)
{
int i,j
write_command(0x80)
for(i=0i<2i++)
{
for(j=0j<1j++)
{
write_data(0x41)
write_data(0x42)
write_data(0x43)
write_data(0x44)
write_data(0x45)
write_data(0x46)
write_data(0x47)
write_data(0x48)
write_data(0x49)
write_data(0x4A)
write_data(0x4B)
write_data(0x4C)
write_data(0x4D)
write_data(0x4E)
write_data(0x4F)
write_data(0x50)
write_data(0x61)
write_data(0x62)
write_data(0x63)
write_data(0x64)
write_data(0x65)
write_data(0x66)
write_data(0x67)
write_data(0x68)
write_data(0x69)
write_data(0x6A)
write_data(0x6B)
write_data(0x6C)
write_data(0x61)
write_data(0x6E)
write_data(0x6F)
write_data(0x70)
}
}
}
void number (void)
{
int i,j
write_command(0x80)
for(i=0i<2i++)
{
for(j=0j<1j++)
{
write_data(0x11)
write_data(0x12)
write_data(0x13)
write_data(0x14)
write_data(0x15)
write_data(0x16)
write_data(0x17)
write_data(0x18)
write_data(0x19)
write_data(0x1A)
write_data(0x1B)
write_data(0x1C)
write_data(0x11)
write_data(0x1E)
write_data(0x1F)
write_data(0x20)
write_data(0x31)
write_data(0x32)
write_data(0x33)
write_data(0x34)
write_data(0x35)
write_data(0x36)
write_data(0x37)
write_data(0x38)
write_data(0x39)
write_data(0x3A)
write_data(0x3B)
write_data(0x3C)
write_data(0x31)
write_data(0x3E)
write_data(0x3F)
write_data(0x40)
}
}
}
void picure (void)
{
int i,j
write_command(0x80)
for(i=0i<2i++)
{
for(j=0j<1j++)
{
write_data(0x81)
write_data(0x82)
write_data(0x83)
write_data(0x84)
write_data(0x85)
write_data(0x86)
write_data(0x87)
write_data(0x88)
write_data(0x89)
write_data(0x8A)
write_data(0x8B)
write_data(0x8C)
write_data(0x81)
write_data(0x8E)
write_data(0x8F)
write_data(0x90)
write_data(0x91)
write_data(0x92)
write_data(0x93)
write_data(0x94)
write_data(0x95)
write_data(0x96)
write_data(0x97)
write_data(0x98)
write_data(0x99)
write_data(0x9A)
write_data(0x9B)
write_data(0x9C)
write_data(0x91)
write_data(0x9E)
write_data(0x9F)
write_data(0xA0)
}
}
}
void white (void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<8j++)
{
write_data(0x91)
write_data(0x92)
}
}
}
void black(void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<8j++)
{
write_data(0xff)
write_data(0xff)
}
}
}
void snow(void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<16j++)
{
write_data(0xdb)
// write_data(0x32)
// write_data(0x33)
// write_data(0x34)
}
}
}
void hoi (void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<16j++)
{
// write_data(0x00)
// write_data(0x01)
// write_data(0x02)
write_data(0x03)
}
}
}
void hline (void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<40j++)
{
write_data(0x01)
}
}
}
void vline(void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<40j++)
{
write_data(0x02)
}
}
}
void net(void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<40j++)
{
write_data(0x03)
}
}
}
void frame(void)
{
int i,j
write_command(0x80)
for(i=0i<4i++)
{
for(j=0j<40j++)
{
write_data(0x04)
}
}
}