新闻中心
液晶使用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 = 0×0;
DDRA = 0×0;
PORTB = 0xff;
DDRB = 0xff;
PORTC = 0×0;
DDRC = 0×0;
DDRD = 0×0; // D口配置为输入
PORTD = 0xff; // 使能上拉电阻
//———– IO端口初始化 END —————–
wdt_enable(1); // 看门狗使能 30MS
ACSR = 0×80;
}
/*****************************************
液晶发送子程序(串行)
输入数据:要发送的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void lcm_out(char a)
{
char i,d;
for(i=0;i<8;i++)
{
cbi(PORTB,1);
d=a&0×80;
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(0×30);
delay(1,8000);
wr_com(0×30);
delay(1,8000);
wr_com(0x0c);
delay(1,8000);
wr_com(0×01); // 清屏
delay(10,8000); // 清屏
wr_com(0×60);
delay(1,8000);
}
void clear_all(void)
{
wr_com(0×01); // 清屏
delay(1,8000); // 清屏
}
//———– 整行显示函数 START —————–
void display(void)
{
wr_com(0×80);
while( *line1!=0×00 )
{
wr_date(*line1);
line1++;
}
wr_com(0×90);
while( *line2!=0×00 )
{
wr_date(*line2);
line2++;
}
wr_com(0×88);
while( *line3!=0×00 )
{
wr_date(*line3);
line3++;
}
wr_com(0×98);
while( *line4!=0×00 )
{
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);
}
}