1、51单片机用12864显示唐诗51单片机用12864显示唐诗 51单片机用12864显示唐诗 #include#include#include#includenn.h#define uchar unsigned char#define uint int#define LCD_databus P0 /LCD12864的8位数据口sbit RS=P22; /RS为0-命令;1-数据 sbit RW=P21; /RW为1-写;0-读 sbit EN=P20; /使能端 sbit CS1=P24; /片选1低电平有效,控制左半屏 sbit CS2=P23; /片选1低电平有效,控制右半屏 sbit k
2、ey1=P30;sbit key2=P31;void delay_ms(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void delay(uint i) while(-i);void Read_busy()/读“忙”函数-数据线的最高位DB71则busy P0=0x00; RS=0; RW=1; EN=1; while(P0 & 0x80); EN=0;void write_LCD_command(uchar value) /写命令函数 Read_busy(); /对LCD的每次读写都要读忙 RS=0; /选择命令 RW=0; /读操作
3、 LCD_databus=value; EN=1; /EN由1-0锁存有效数据 _nop_(); _nop_(); EN=0;void write_LCD_data(uchar value)/写数据函数 Read_busy(); RS=1; /选择数据 RW=0; LCD_databus=value; EN=1; /EN由1-0锁存有效数据 _nop_(); _nop_(); EN=0;void Set_page(uchar page) /设置“页”LCD12864共8页,一页是8行点阵点 page=0xb8|page; /页的首地址为0xB8 write_LCD_command(page);
4、void Set_line(uchar startline) /设置显示的起始行 startline=0xC0|startline; /起始行地址为0xC0 write_LCD_command(startline); /设置从哪行开始:共0-63;一般从0 行开始显示void Set_column(uchar column) /设置显示的列 column=column &0x3f; /列的最大值为64 column= 0x40|column; /列的首地址为0x40 write_LCD_command(column); /规定显示的列的位置 void SetOnOff(uchar onoff)
5、 /显示开关函数:0x3E是关显示,0x3F是开显示 onoff=0x3e|onoff; /onoff:1-开显示;0-关显示 write_LCD_command(onoff);void SelectScreen(uchar screen) /选择屏幕 switch(screen) case 0: CS1=0;CS2=0;break; /全屏 case 1: CS1=0;CS2=1;break;/左半屏 case 2: CS1=1;CS2=0;break;/右半屏 default:break; void ClearScreen(uchar screen) /清屏函数 uchar i,j; Se
6、lectScreen(screen); /0-全屏;1-左半屏;2-右半屏 for(i=0;i8;i+) /控制页数0-7,共8页 Set_page(i); Set_column(0); for(j=0;j64;j+) /控制列数0-63,共64列 write_LCD_data(0x00); /写入0,地址指针自加1 void init_LCD() /LCD的初始化 SetOnOff(1); /开显示 SelectScreen(0); ClearScreen(0); /清屏 Set_line(0); /开始行:0void Display_HZ(uchar screen,uchar page,u
7、char column,uchar *p) uchar i; SelectScreen(screen); Set_page(page); /写上半页:16*8 Set_column(column*16); /控制列 for(i=0;i16;i+) /控制16列的数据输出 write_LCD_data(pi); /汉字的上半部分 Set_page(page+1); /写下半页:16*8 Set_column(column*16); /控制列 for(i=0;i16;i+) /控制16列的数据输出 write_LCD_data(pi+16); /汉字的下半部分 void disp1() Clear
8、Screen(0); Display_HZ(1,0,0,zi);/guanjian zhizheng Display_HZ(1,0,1,yun);/guanjian zhizheng Display_HZ(1,0,2,san);/guanjian zhizheng Display_HZ(1,0,3,hao);/guanjian zhizheng Display_HZ(1,2,0,sheng);/guanjian zhizheng Display_HZ(1,2,1,dang);/guanjian zhizheng Display_HZ(1,2,2,zuo);/guanjian zhizheng
9、Display_HZ(1,2,3,ren);/guanjian zhizheng Display_HZ(2,2,0,jie);/guanjian zhizheng Display_HZ(1,4,0,si);/guanjian zhizheng Display_HZ(1,4,1,yi);/guanjian zhizheng Display_HZ(1,4,2,wei);/guanjian zhizheng Display_HZ(1,4,3,gui);/guanjian zhizheng Display_HZ(2,4,0,xiong);/guanjian zhizheng Display_HZ(1,
10、6,0,zhi);/guanjian zhizheng Display_HZ(1,6,1,jin);/guanjian zhizheng Display_HZ(1,6,2,sii);/guanjian zhizheng Display_HZ(1,6,3,xiang);/guanjian zhizheng Display_HZ(2,6,0,yu);/ while(1);void disp2() ClearScreen(0); Display_HZ(1,0,0,bu);/guanjian zhizheng Display_HZ(1,0,1,ken);/guanjian zhizheng Displ
11、ay_HZ(1,0,2,guo);/guanjian zhizheng Display_HZ(1,0,3,jiang);/guanjian zhizheng Display_HZ(2,0,0,dong);/guanjian zhizheng void Key1() if(key1=0) delay_ms(10); if(key1=0) while(!key1) while(!key1) disp2(); void Key2() if(key2=0) delay_ms(10); if(key2=0) while(!key2) while(!key2) disp1(); void main() init_LCD(); /初始12864 ClearScreen(0); /清屏 Set_line(0); /显示开始行 disp1(); while(1) Key1(); Key2();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1