//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++; } } }
| |
| |