📄 lcd._c
字号:
#include "lcd.h"
#define CS BIT(5)
#define SID BIT(6)
#define SCLK BIT(7)
#define LCD_ON PORTD &=~ BIT(7)
#define LCD_OFF PORTD &=~ BIT(7)
#define EN_CS PORTA |= CS
#define DIS_CS PORTA &=~ CS
#define ST_SID PORTA |= SID
#define CLS_SID PORTA &=~ SID
#define ST_SCLK PORTA |= SCLK
#define CLS_SCLK PORTA &=~ SCLK
unsigned char ma[] ={"汉字显示LCD"};
unsigned char flash ma2[]={"自带字库图文混排"};
unsigned char flash ma3[]={"控制IC:ST7920 "};
unsigned char flash ma4[]={"功能强大使用方便"};
void portini(void)
{
DDRD=0xff;
PORTD = 0xff;
DDRB = 0xff;
PORTB = 0xff;
}
void delaynms(uint di) //延时
{
uint da,db;
for(da=0;da<di;da++)
for(db=0;db<3000;db++);
}
void lcdinit(void)//初始化LCD
{
delaynms(10);
EN_CS;
write(0,0x30); //8位界面,基本指令集
delaynms(10);
write(0,0x30); //显示打开,光标关,反白关
delaynms(10);
write(0,0x0c); //显示打开,光标关,反白关
delaynms(10);
write(0,0x01); //清屏
delaynms(10);
write(0,0x60);
}
void write(uchar start,uchar ddata) //写指令或数据
{
uchar start_data,Hdata,Ldata;
if(start==0)
start_data = 0xf8; //写指令
else
start_data = 0xfa; //写数据
Hdata = ddata&0xf0; //取高4位
Ldata = (ddata<<4)&0xf0; //取低4位
sendbyte(start_data); //发送起始信号
delaynms(100);
sendbyte(Hdata); //发送高四位
delaynms(50);
sendbyte(Ldata); //发送低四位
delaynms(50);
}
void sendbyte(uchar bbyte) //发送一个字节
{
unsigned char i;
for(i=0;i<8;i++)
{
if((bbyte&0x80)==1) //取出最高位
{ST_SID;}
else
{CLS_SID;}
ST_SCLK;
delay_nus(100);
CLS_SCLK;
bbyte<<=1;
delay_nus(100);
}
}
void lcdtest(void) //图形方式下屏幕全黑
{
uchar i,j;
for(i=0;i<32;i++)
{
write(0,0x80+i);write(0,0x80);
for(j=0;j<16;j++)write(1,0xff);
}
for(i=0;i<32;i++)
{
write(0,0x80+i);write(0,0x88);
for(j=0;j<16;j++) write(1,0xff);
}
}
void lcdcls(void) //图形方式下清屏
{
unsigned char i,j;
for(i=0;i<32;i++)
{
{write(0,0x80+i);delaynms(10);write(0,0x80);}
for(j=0;j<16;j++){ write(1,0x00);delaynms(10);}
}
for(i=0;i<32;i++)
{
{write(0,0x80+i);delaynms(10);write(0,0x88);}
for(j=0;j<16;j++) {write(1,0x00);delaynms(10);}
}
}
void main()
{
unsigned char i;
delaynms(1000);
portini();
lcdinit();
LCD_ON;
while(1)
{
lcdtest();
lcdcls();
write(0,0x80); for(i=0;i<16;i++) write(1,ma[i]);
delaynms(10);
write(0,0x90); for(i=0;i<16;i++) write(1,ma2[i]);
delaynms(10);
write(0,0x88); for(i=0;i<16;i++) write(1,ma3[i]);
delaynms(10);
write(0,0x98); for(i=0;i<16;i++) write(1,ma4[i]);
delaynms(10);
write(0,0x36); //图形方式
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -