液晶使用ST7920控制器,串并行模式(本范例使用串行)
/*M16驅(qū)動LCM128645,液晶芯片ST7920
*/
#include "j.h"
#include
#define light_oncbi(PORTB, 2);
#define light_offsbi(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;
}
/*****************************************
液晶發(fā)送子程序(串行)
輸入數(shù)據(jù):要發(fā)送的8位數(shù)據(jù)
輸出:無
作者:
修改時間: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);
}
}
/*****************************************
液晶寫控制字程序
輸入數(shù)據(jù):要寫入的8位數(shù)據(jù)
輸出:無
作者:
修改時間: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");
}
}
/*****************************************
液晶寫數(shù)據(jù)字程序
輸入數(shù)據(jù):要寫入的8位數(shù)據(jù)
輸出:無
作者:
修改時間: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");
}
}
/*****************************************
液晶初始化程序
輸入數(shù)據(jù):無
輸出:無
作者:
修改時間: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);//清屏
}
//----------- 整行顯示函數(shù) 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 = "";
}
//----------- 整行顯示函數(shù) END -----------------
//----------- 系統(tǒng)初始化函數(shù) START -----------------
void system_init(void)
{
line1 = "";
line2 = "";
line3 = "";
line4 = "";
light_on
lcm_init();
}
//----------- 系統(tǒng)初始化函數(shù) END -----------------
int main(void)
{
delay(200,8000);
cpu_init();
system_init();
while(1)
{
line1 = " 歡迎光臨 ";
line2 = "";
line3 = "東創(chuàng)科技 ";
line4 = " www.dycxin.com.cn ";
display();
delay(800,8000);
}
}