液晶使用ST7920控制器,串并行模式(本范例使用串行)
/* M16驱动LCM128645,液晶芯片ST7920
*/
#include "j.h"
#include
#define light_on cbi(PORTB, 2);
#define light_off sbi(PORTB, 2);
void clear_all(void);
// 显示用指针变量
char *line1;
char *line2;
char *line3;
char *line4;
void cpu_init(void)
{
//----------- IO端口初始化 START -----------------
PORTA = 0x0;
DDRA = 0x0;
PORTB = 0xff;
DDRB = 0xff;
PORTC = 0x0;
DDRC = 0x0;
DDRD = 0x0; // D口配置为输入
PORTD = 0xff; // 使能上拉电阻
//----------- IO端口初始化 END -----------------
wdt_enable(1); // 看门狗使能 30MS
ACSR = 0x80;
}
/*****************************************
液晶发送子程序(串行)
输入数据:要发送的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void lcm_out(char a)
{
char i,d;
for(i=0;i<8;i++)
{
cbi(PORTB,1);
d=a&0x80;
if(d)
sbi(PORTB,0);
else
cbi(PORTB,0);
a<<=1;
sbi(PORTB,1);
}
}
/*****************************************
液晶写控制字程序
输入数据:要写入的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void wr_com(uchar a)
{
uchar s,i;
s=a&0xf0;
lcm_out(0xf8);
lcm_out(s);
s=a&0x0f;
s<<=4;
lcm_out(s);
for( i=0;i<254;i++ ) // 延时
{
asm("nop");
}
}
/*****************************************
液晶写数据字程序
输入数据:要写入的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void wr_date(uchar a)
{
uchar s,i;
s=a&0xf0;
lcm_out(0xfa);
lcm_out(s);
s=a&0x0f;
s<<=4;
lcm_out(s);
for( i=0;i<254;i++ ) // 延时
{
asm("nop");
}
}
/*****************************************
液晶初始化程序
输入数据:无
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void lcm_init(void)
{
wr_com(0x30);
delay(1,8000);
wr_com(0x30);
delay(1,8000);
wr_com(0x0c);
delay(1,8000);
wr_com(0x01); // 清屏
delay(10,8000); // 清屏
wr_com(0x60);
delay(1,8000);
}
void clear_all(void)
{
wr_com(0x01); // 清屏
delay(1,8000); // 清屏
}
//----------- 整行显示函数 START -----------------
void display(void)
{
wr_com(0x80);
while( *line1!=0x00 )
{
wr_date(*line1);
line1++;
}
wr_com(0x90);
while( *line2!=0x00 )
{
wr_date(*line2);
line2++;
}
wr_com(0x88);
while( *line3!=0x00 )
{
wr_date(*line3);
line3++;
}
wr_com(0x98);
while( *line4!=0x00 )
{
wr_date(*line4);
line4++;
}
line1 = "";
line2 = "";
line3 = "";
line4 = "";
}
//----------- 整行显示函数 END -----------------
//----------- 系统初始化函数 START -----------------
void system_init(void)
{
line1 = "";
line2 = "";
line3 = "";
line4 = "";
light_on
lcm_init();
}
//----------- 系统初始化函数 END -----------------
int main(void)
{
delay(200,8000);
cpu_init();
system_init();
while(1)
{
line1 = " 欢迎光临 ";
line2 = "";
line3 = " 东创科技 ";
line4 = " www.dycxin.com.cn ";
display();
delay(800,8000);
}
}