1、#include#include“zifuku.h“#define uchar unsigned char#define uint unsigned intsbit CS1=P23; /LCD 右屏幕sbit CS2=P24; /LCD 左屏幕sbit RS=P20; /LCD 数据、指令寄存器sbit RW=P21; /LCD 读、写操作sbit E=P22; /LCD 使能信号,下降沿有效/*自定义延时子函数*/void delayms(uchar z)int x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*判断 LCD 忙信号状态*/void buys()int
2、 dat;RW=1;RS=0;doP0=0x00;E=1;dat=P0;E=0;dat=0x80 while(!(dat=0x00);/*LCD 写指令函数*/void w_com(uchar com)buys();RW=0;RS=0;E=1;P0=com;E=0;/*LCD 写数据函数*/void w_date(uchar date)buys();RW=0;RS=1;E=1;P0=date;E=0;/*LCD 选屏函数*/void select_screen(uchar screen)switch(screen)case 0: /选择全屏CS1=0;CS2=0;break;case 1: /
3、选择左屏CS1=0;CS2=1;break;case 2: /选择右屏CS1=1;CS2=0;break;/* case 3: /选择右屏CS1=1;CS2=1;break;*/ /*LCDx 向上滚屏显示*/void lcd_rol()int x;for(x=0;x64;x+)select_screen(0);w_com(0xc0+x);delayms(500);/*LCD 清屏函数:清屏从第一页的第一列开始,总共 8 页,64 列*/void clear_screen(screen)int x,y;select_screen(screen); /screen:0-选择全屏,1-选择左半屏,
4、2- 选择右半屏for(x=0xb8;x0xc0;x+) /从 0xb8-0xbf,共 8 页w_com(x);w_com(0x40); /列的初始地址是 0x40for(y=0;y64;y+)w_date(0x00); /*LCD 显示汉字字库函数*/void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun) /screen:选择屏幕参数,page:选择页参数 0-3, col:选择列参数 0-3,mun: 显示第几个汉字的参数int a;mun=mun*32;select_screen(screen);w_com(0
5、xb8+(page*2);w_com(0x40+(col*16);for ( a=0;a16;a+)w_date(hanzimun+);w_com(0xb8+(page*2)+1);w_com(0x40+(col*16);for ( a=0;a16;a+)w_date(hanzimun+);/*LCD 显示字符字库函数*/void lcd_display_zifuk(uchar screen,uchar page,uchar col,uchar mun) /screen:选择屏幕参数,page:选择页参数 0-3, col:选择列参数 0-7,mun: 显示第几个汉字的参数int a;mun=
6、mun*16;select_screen(screen);w_com(0xb8+(page*2);w_com(0x40+(col*8);for ( a=0;a8;a+)w_date(zifumun+);w_com(0xb8+(page*2)+1);w_com(0x40+(col*8);for ( a=0;a8;a+)w_date(zifumun+);/*LCD 显示数字字库函数*/void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun) /screen:选择屏幕参数,page:选择页参数 0-3, col:选择列参数
7、 0-7,mun: 显示第几个汉字的参数int a;mun=mun*16;select_screen(screen);w_com(0xb8+(page*2);w_com(0x40+(col*8);for ( a=0;a8;a+)w_date(shuzimun+);w_com(0xb8+(page*2)+1);w_com(0x40+(col*8);for ( a=0;a8;a+)w_date(shuzimun+);/*LCD 初始化函数*/void lcd_init()w_com(0x3f); /LCD 开显示w_com(0xc0); /LCD 行初始地址,共 64 行w_com(0xb8);
8、/LCD 页初始地址,共 8 页w_com(0x40); /LCD 列初始地址,共 64 列/*LCD 显示主函数*/void main()/第一行int x;lcd_init(); /LCD 初始化clear_screen(0); /LCD 清屏幕lcd_display_shuzi(1,0,4,5); /LCD 显示数字lcd_display_shuzi(1,0,5,1); /LCD 显示数字lcd_display_hanzi(1,0,3,0); /LCD 显示汉字lcd_display_hanzi(2,0,0,1); /LCD 显示汉字 /LCD 字符汉字lcd_display_hanzi
9、(2,0,1,2); /LCD 显示汉字/第二行 lcd_display_zifuk(1,1,2,0); /LCD 显示字符lcd_display_zifuk(1,1,3,0); /LCD 显示字符lcd_display_zifuk(1,1,4,0); /LCD 显示字符lcd_display_zifuk(1,1,5,4); /LCD 显示字符lcd_display_shuzi(1,1,6,8); /LCD 显示字符lcd_display_shuzi(1,1,7,9); /LCD 显示字符lcd_display_shuzi(2,1,0,5); /LCD 显示字符lcd_display_shuz
10、i(2,1,1,1); /LCD 显示字符lcd_display_zifuk(2,1,2,4);lcd_display_zifuk(2,1,3,1);lcd_display_zifuk(2,1,4,2);lcd_display_zifuk(2,1,5,3);/第三行for(x=0;x4;x+)lcd_display_hanzi(1,2,x,3+x); /LCD 显示汉字for(x=0;x4;x+)lcd_display_hanzi(2,2,x,7+x); /LCD 显示汉字/第四行for(x=0;x4;x+)lcd_display_zifuk(1,3,x,5+x); /LCD 显示汉字lcd_
11、display_shuzi(1,3,4,7);lcd_display_shuzi(1,3,5,5);lcd_display_shuzi(1,3,6,5);lcd_display_zifuk(1,3,7,9);lcd_display_shuzi(2,3,0,8);lcd_display_shuzi(2,3,1,9);lcd_display_shuzi(2,3,2,9);lcd_display_shuzi(2,3,3,5);lcd_display_shuzi(2,3,4,6);lcd_display_shuzi(2,3,5,8);lcd_display_shuzi(2,3,6,9);lcd_display_shuzi(2,3,7,2);while(1);/* while(1) / LCD 向上滚屏显示lcd_rol(); */