//author:wen-guang
//一屏顯示"12345678"
#include
#include
#include
#include
#define uchb unsigned char bdata
#define uchd unsigned char data
#define uchi unsigned char idata
#define uchp unsigned char pdata
#define uchx unsigned char xdata
#define uchc unsigned char code
#define DISPON 0x3f
#define DISPOFF 0x3e
#define LEFT 1
#define RIGHT 0
#define HIGH 1
#define LOW 0
#define BUFLEN 8
#define HEAD 0xad
#define SLCTCARD 0x57
#define DISPMSG 0x55
#define CHKCARD 0x53
#define PWRON 0x51
sbit CS1=P2^7;
sbit CS2=P2^3;
sbit LC1=P3^2;
sbit LCDE=P3^3;
sbit LC2=P3^6;
sbit RS=P3^7;
/*E=LCDE;
RS=D/I;
*/
uchc pwait[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
uchc apixs[]={
0xF0,0xF8,0x0C,0xC4,0x0C,0xF8,0xF0,0x00,0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00,
0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,
0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,
0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,
0x7C,0x7C,0x44,0x44,0x44,0xC4,0x84,0x00,0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,
0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,
0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,
0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00,
0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00,0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00,
0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00,0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,
0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,
0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00
};
void init51(); //8051 internal initial
void lcminit(); //LCM display initial
void delayxms(uchd dsec, uchd csec, uchd msec);
void lcmclr(uchd start_page, uchd start_col, uchd page_num, uchd col_num );
void lcmwdatum(bit lr,uchd datum);
void lcmwcmm(bit lr,uchd command);
void dispch(uchc * straddr, uchd start_page, uchd start_col, uchd ch_flag, uchd byte_num, uchd dist);
void disp(uchc * pixaddr, uchd start_page, uchd start_col, uchd page_num, uchd col_num);
void main(void)
{
delayxms(1,10,100);
init51();
delayxms(1,100,100);
lcminit();
lcmclr(0,0,8,128);
while(1){
dispch(pwait,3,0,0,8,20);
}
}
void delayxms(uchd dsec, uchd csec, uchd msec)
{
uchd time0;
uchd time1;
uchd time2;
for(time0=0;time0 for(time1=0;time1 for(time2=0;time2 ;
}
void init51()
{
delayxms(1,10,100);
/*LC1=0;
LC2=0;*/
CS1=CS2=HIGH;
_nop_();
RS=LCDE=LOW;
}
void lcmwdatum(bit lr,uchd datum)
{
LCDE=LOW; RS=HIGH;
if(lr==LEFT) {CS2=HIGH; CS1=LOW;}//select left half of LCM
else {CS1=HIGH; CS2=LOW;} //select right half of LCM
P0=datum; //write display data to LCM
LCDE=HIGH; LCDE=LOW; //__/--\__
CS1=CS2=HIGH;
}
void lcmwcmm(bit lr,uchd command)
{
LCDE=LOW; RS=LOW;
if(lr==LEFT) {CS2=HIGH; CS1=LOW;}//select left half of LCM
else {CS1=HIGH; CS2=LOW;} //select right half of LCM
P0=command; //write command to LCM
LCDE=HIGH; LCDE=LOW; //__/--\__
CS1=CS2=HIGH;
}
void lcminit()
{
lcmwcmm(LEFT,DISPOFF); //left half of LCM off
lcmwcmm(RIGHT,DISPOFF); //right half of LCM off
lcmwcmm(LEFT,0xc0); //set start display line 0
lcmwcmm(RIGHT,0xc0); //set start display line 0
lcmwcmm(LEFT,DISPON); //left half of LCM off
lcmwcmm(RIGHT,DISPON); //right half of LCM off
}
void lcmclr(uchd start_page, uchd start_col, uchd page_num, uchd col_num )
{
uchd cur_col,cur_page;
//lcmwcmm(LEFT,DISPOFF);
//lcmwcmm(RIGHT,DISPOFF);
for(cur_page=start_page;cur_page<(start_page+page_num);cur_page++)
for(cur_col=start_col;cur_col<(start_col+col_num);cur_col++)
{
if(cur_col<0x40)
{
lcmwcmm(LEFT,(cur_page&7)|0xb8); //set page
lcmwcmm(LEFT,(cur_col&0x3f)|0x40); //set column
lcmwdatum(LEFT,0); //clear to 0
}
else
{
lcmwcmm(RIGHT,(cur_page&7)|0xb8); //set page
lcmwcmm(RIGHT,(cur_col&0x3f)|0x40);//set column
lcmwdatum(RIGHT,0); //clear to 0
}
}
//lcmwcmm(LEFT,DISPON);
//lcmwcmm(RIGHT,DISPON);
}
void dispch(uchc * straddr, uchd start_page, uchd start_col, uchd ch_flag, uchd byte_num, uchd dist)
{
uchd byte_c;
uchd cur_page=start_page;
uchd cur_col=start_col;
for(byte_c=0;byte_c {
disp(apixs+(*straddr)*16,cur_page,cur_col,2,8);
cur_col=cur_col+dist-4;
straddr++;
}
}
void disp(uchc * pixaddr, uchd start_page, uchd start_col, uchd page_num, uchd col_num)
{
uchd cur_col,cur_page;
uchc * chp;
chp=pixaddr;
for(cur_page=start_page;cur_page<(start_page+page_num);cur_page++)
for(cur_col=start_col;cur_col<(start_col+col_num);cur_col++)
{
if(cur_col<0x40)
{
lcmwcmm(LEFT,(cur_page&7)|0xb8); //set page
lcmwcmm(LEFT,(cur_col&0x3f)|0x40); //set column
lcmwdatum(LEFT,*chp); //write display data to LCM
chp++;
}
else
{
lcmwcmm(RIGHT,(cur_page&7)|0xb8); //set page
lcmwcmm(RIGHT,(cur_col&0x3f)|0x40);//set column
lcmwdatum(RIGHT,*chp); //write display data to LCM
chp++;
}
}
}
用C51寫的液晶驅動程序
更新時間: 2007-02-02 10:25:12來源: 粵嵌教育瀏覽量:1702