#include <reg52.h> #include <absacc.h> #include "intrins.h"
typedef unsigned int WORD; typedef unsigned char BYTE;
sbit wdi=P1^7; sbit lcd_bg=P1^6; sbit en =P2^7; // 读写使能 sbit rw =P2^6; // 读写 选择 sbit di =P2^5; // 数据指令 选择 sbit cs1 =P2^4; // 片选1, sbit cs2 =P2^3; // 片选2,
//#define LCD12864DataPort P0
const BYTE CHAR_0[5]={0x3E,0x51,0x49,0x45,0x3E};
void port_ini(void) { cs1=1; cs2=1; _nop_(); _nop_(); en=1; _nop_(); _nop_(); en=0; _nop_(); _nop_(); } void write_command( BYTE nByte ) { rw=0; di=0; _nop_(); _nop_(); P0=nByte; en=1; _nop_(); _nop_(); en=0; _nop_(); _nop_(); } void write_char( BYTE nByte, BYTE CS11, BYTE CS22 ) { if(CS11) cs1=1; else cs1=0;
if(CS22) cs2=1; else cs2=0;
di=1; rw=0;
P0=nByte; en=1; _nop_(); _nop_(); en=0; _nop_(); _nop_();
} void clear_lcd( void ) { BYTE i,j; for(i=0;i<8;i++) { write_command(i|0xB8); write_command(0x40); for(j=0;j<128;j++) { if(j<=63) write_char(0,1,0); else write_char(0,0,1); _nop_(); } } } void display_char( BYTE *chr, BYTE nRow, BYTE nCol ) { BYTE i,tmpCol; write_command(0xB8|nRow); tmpCol=nCol; for(i=0;i<5;i++) { if(tmpCol<=63) { write_command(0x40|tmpCol); write_char(chr,1,0); } else { write_command(0x40|(tmpCol-64)); write_char(chr,0,1); } tmpCol++; } }
void delay() { BYTE m,n; for(m=0;m<200;m++) { for(n=0;n<500;n++); } }
void main() { lcd_bg=0; port_ini(); write_command(0xc0); write_command(0x3f); clear_lcd(); display_char((BYTE *)&CHAR_0[0],4,20);
while(1) { wdi=!wdi; delay(); } } 程序如上 不知是不是程序的问题 |