📄 aaa.c
字号:
/*
接法:
data_port.0,data_port.7 ---D0 - D7
P3.2---CD1,command; 0,data
P3.3---WR低电平有效
P3.4---RD低电平有效
*/
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define data_port P0
sbit lcdCD = P2^3;
sbit lcdWR = P2^0;
sbit lcdRD = P2^1;
sbit lcdCE=P2^2;
sbit light = P3^4;
void dely_100ms(void) interrupt 1 using 1
{
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
//light=~light;
}
uchar lcdRead(void)
{
uchar status;
EA = 0;
//data_port = 0xff;
lcdCD = 1;
//lcdWR = 1;
lcdRD = 0;
status = data_port;
lcdRD = 1;
EA = 1;
return status;
}
/*更改,
状态检查
写命令
写数据
*/
uchar lcdStatus( uchar chan)
{
uchar data temp = 0;
do
{
if((lcdRead()&chan)==chan)
{
break;
}
temp++;
}
while(temp<10);
return 0;
}
void lcd_1_write(bit CD, uchar writeIn)
{
lcdStatus(0x03);
EA=0;
lcdCD = CD;
// lcdRD = 1;
lcdWR = 0;
data_port = writeIn;
lcdWR = 1;
EA=1;
}
void lcd_2_write(uchar paraA, uchar paraB)
{
lcd_1_write(0,paraA);
lcd_1_write(1,paraB);
}
void lcd_3_write(uchar paraA, uchar paraB, uchar paraC)
{
lcd_1_write(0,paraA);
lcd_1_write(0,paraB);
lcd_1_write(1,paraC);
}
void lcdInit(void)
{
lcd_3_write(0x00, 0x00, 0x21);// 指针位置设置
lcd_3_write(0x00, 0x00, 0x40);// 文本显示区首地址
lcd_3_write(0x1e, 0x00, 0x41);// 文本显示区宽度
lcd_3_write(0x00, 0x00, 0x42);// 图形显示区首地址
lcd_3_write(0x1e, 0x00, 0x43);// 图形显示区宽度
lcd_1_write(1,0xa1);// 光标形状光标开头为8 点(列)×1 行
lcd_1_write(1,0x80);// 显示方式设置
lcd_1_write(1,0x98);// 显示开关设置启用图形方式,禁止文本,禁止光标
}
void lcdCLS()
{
uint data clsCount;
lcd_1_write(1,0xb0);// 设置自动写
lcd_3_write(0x00, 0x00, 0x24);// 地址指针设置
for(clsCount=0; clsCount<3840; clsCount++)
{
lcdStatus(0x08);// 先检查,再写
lcd_1_write(0,0x00);
}
lcd_1_write(1,0xb2);// 自动写结束
}
void showPic(void)
{
/*
uint data clsCount;
lcd_1_write(1,0xb0);// 设置自动写
lcd_3_write(0x00, 0x00, 0x24);// 地址指针设置
for(clsCount=0; clsCount<750; clsCount++)
{
lcdStatus(0x08);// 先检查,再写
lcd_1_write(0,hello[clsCount]);
}
lcd_1_write(1,0xb2);
*/
uchar xdata in[32]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x71,0xF0,0x30,0xD8,
0x30,0xD8,0x30,0xD8,0x30,0xD8,0x79,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uint xdata i;
uchar addr_L,addr_H;
addr_H = 0x00;
addr_L = 0x00;
for(i=0; i<16; i++)
{
lcd_3_write(addr_L, addr_H, 0x24);
lcd_2_write(in[i*2],0xC0);// in[i*2]
lcd_2_write(in[i*2+1],0xC0);// in[i*2+1]
addr_L+=30;
if(addr_L<30)
{
addr_H++;
}
}
}
void main(void)
{
uchar data i=0;
light = 0;
TMOD = 0x61;
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
IP = 0x08;
EA = 1;
ET0 = 1;
TR0 = 1;// 在定时器中断里闪灯,有时不知道程序是否在运行
for(i=1000; i>0; i--)// 认为够长的延时,用的6M晶振。
{
;
}
i=0;
while(i<5)
{
lcdInit();
i++;
}
lcdCLS();
//for(i=0; i<10; i++)
showPic();
//light=1;
showPic();
light=1;
for(;;)
{
showPic();
//light = !light;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -