《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
char i;
for (i=0;i<32;i++) {
if ((x+i)<64) //x代表列,显示在左半屏 {
LCD_WriteCommand1(0xB8+y+i/16); LCD_WriteCommand1(0x40+x+i); LCD_WriteData1(Dat[i]); } else {
LCD_WriteCommand2(0xB8+y+i/16); //因为一个字占16行,0xb8表示0页 LCD_WriteCommand2(0x40+x-64+i); //因为一个字占16列,0x40表示0列 LCD_WriteData2(Dat[i]); } } }
void LCD_WriteSZ(char x,char y,char *Dat) //显示16*8点阵数字 {
char i;
for (i=0;i<16;i++) {
if ((x+i%8)<64) //x代表列, 一个数字占8列,显示在左半屏 {
LCD_WriteCommand1(0xB8+y+i/8); //设置页地址 y表示页
LCD_WriteCommand1(0x40+x+i%8); //设置列地址 x表示列,一个数字占8列 LCD_WriteData1(Dat[i]); } else {
LCD_WriteCommand2(0xB8+y+i/8);
LCD_WriteCommand2(0x40+x-64+i%8); //减去64列,表示写在右半屏 LCD_WriteData2(Dat[i]); } } }
void InitLCD(void) //初始化LCD {
char i,j;
LCD_RST=0; //正常状态 Delay1ms(1);
LCD_RST=1; //正处于复位初始化状态
LCD_WriteCommand1(0xc0); //设置起始行 LCD_WriteCommand2(0xc0); //设置起始行
10
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
LCD_WriteCommand1(0x3f); //开显示 LCD_WriteCommand2(0x3f); //开显示 for (j=0;j<8;j++) //清屏 {
LCD_WriteCommand1(0xB8+j); //清左半屏 LCD_WriteCommand1(0x40); for (i=0;i<64;i++) LCD_WriteData1(0x00);
LCD_WriteCommand2(0xB8+j); //清右半屏 LCD_WriteCommand2(0x40); for (i=0;i<64;i++) LCD_WriteData2(0x00); } }
void DispBmp(char *buf) //显示一幅位图 {
int i,j;
for (j=0;j<8;j++) //显示位图 {
LCD_WriteCommand1(0xB8+j); LCD_WriteCommand1(0x40); for (i=0;i<64;i++)
LCD_WriteData1(buf[(j*2)*64+i]); LCD_WriteCommand2(0xB8+j); LCD_WriteCommand2(0x40); for (i=0;i<64;i++)
LCD_WriteData2(buf[(j*2+1)*64+i]); } }
void DispBmpLeft(char *buf) //显示一幅位图 {
int i,j,k;
for (k=0;k<128;k++) {
for (j=0;j<8;j++) //显示位图 {
LCD_WriteCommand1(0xB8+j); LCD_WriteCommand1(0x40);
for (i=0;i<64;i++) //左移 {
if((i+k)<128)
LCD_WriteData1(buf[(j*2)*64+i+k]); else
LCD_WriteData1(buf[(j*2)*64+i+k-128]);
11
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
}
LCD_WriteCommand2(0xB8+j); LCD_WriteCommand2(0x40); for (i=0;i<64;i++) {
if((i+k)<64)
LCD_WriteData2(buf[(j*2+1)*64+i+k]); else
LCD_WriteData2(buf[(j*2+1)*64+i+k-128]); } } } }
void DispBmpRight(char *buf) //显示一幅位图 {
int i,j,k;
for (k=0;k<128;k++) {
for (j=0;j<8;j++) //显示位图 {
LCD_WriteCommand1(0xB8+j); LCD_WriteCommand1(0x40); for (i=0;i<64;i++) //右移 {
if((i-k)>0)
LCD_WriteData1(buf[(j*2)*64+i-k]); else
LCD_WriteData1(buf[(j*2)*64+i-k+128]); }
LCD_WriteCommand2(0xB8+j); LCD_WriteCommand2(0x40); for (i=0;i<64;i++) {
if((i-k)>-64)
LCD_WriteData2(buf[(j*2+1)*64+i-k]); else
LCD_WriteData2(buf[(j*2+1)*64+i-k+128]); } } } }
char code zero[]={ }; //0 char code one[]={ }; //1 char code two[]={ }; //2
12
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
char code three[]={}; //3 char code four[]={ }; //4 char code five[]={ }; //5 char code six[]={ }; //6 char code seven[]={ }; //7 char code eight[]={ }; //8 char code nine[]={ }; //9
char code maohao[]={ }; //冒号 char code dot[]={ }; //点 char code wen[]={ }; //温 char code du[]={ }; //度 char code dian[]={ };//电 char code ya[]={ };//压 char code li[]={ }; //力 char code C[]={ }; //℃ char code N[]={ }; //N char code hao[]={ }; //m char code V[]={ }; //V
char code screen4[]={ }; //请选择:1.温度;2.电;3.压力; char code jiang[]={};//江 char code su[]={};//苏 char code da[]={};//大 char code xue[]={};//学 char code huan[]={};//欢 char code ying[]={};//迎 char code nin[]={};//您
char code gantanhao[]={};//!
void DispLCD(char *DispBuf,char num) {
int i;
for(i=0;i<5;i++) {
if((num==1)&&(i==2)) {
LCD_WriteSZ(56+8*i,3,dot); Delay1ms(100); i++; }
if((num==2)&&(i==1)) {
LCD_WriteSZ(56+8*i,3,dot); Delay1ms(100); i++; }
13
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
if((num==3)&&(i==3)) {
LCD_WriteSZ(56+8*i,3,dot); Delay1ms(100); i++; }
switch(DispBuf[i]) {
case 0:
LCD_WriteSZ(56+8*i,3,zero); Delay1ms(100);break; case 1:
LCD_WriteSZ(56+8*i,3,one); Delay1ms(100);break; case 2:
LCD_WriteSZ(56+8*i,3,two); Delay1ms(100);break; case 3:
LCD_WriteSZ(56+8*i,3,three); Delay1ms(100);break; case 4:
LCD_WriteSZ(56+8*i,3,four); Delay1ms(100);break; case '5':
LCD_WriteSZ(56+8*i,3,five); Delay1ms(100);break; case 6:
LCD_WriteSZ(56+8*i,3,six); Delay1ms(100);break; case 7:
LCD_WriteSZ(56+8*i,3,seven); Delay1ms(100);break; case 8:
LCD_WriteSZ(56+8*i,3,eight); Delay1ms(100);break; case 9:
LCD_WriteSZ(56+8*i,3,nine); Delay1ms(100);break; /*case ':':
LCD_WriteSZ(48+8*i,3,maohao); Delay1ms(100);break; case '.':
LCD_WriteSZ(48+8*i,3,dot); Delay1ms(100);break;*/
14