欢迎来到天天文库
浏览记录
ID:39348578
大小:28.02 KB
页数:6页
时间:2019-07-01
《51单片机用12864显示唐诗》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、51单片机用12864显示唐诗#include#include#include#include"nn.h"#defineucharunsignedchar#defineuintint#defineLCD_databusP0//LCD12864的8位数据口sbitRS=P2^2;//RS为0---命令;1----数据sbitRW=P2^1;//RW为1---写;0---读sbitEN=P2^0;//使能端sbitCS1=P2^4;//片选1低电
2、平有效,控制左半屏sbitCS2=P2^3;//片选1低电平有效,控制右半屏sbitkey1=P3^0;sbitkey2=P3^1;voiddelay_ms(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiddelay(uinti){while(--i);}voidRead_busy()//读“忙”函数-----数据线的最高位DB71则busy{P0=0x00;RS=0;RW=1;EN=1;while(P0&0x80);EN=0;}voidw
3、rite_LCD_command(ucharvalue)//写命令函数{Read_busy();//对LCD的每次读写都要读忙RS=0;//选择命令RW=0;//读操作LCD_databus=value;EN=1;//EN由1----0锁存有效数据_nop_();_nop_();EN=0;}voidwrite_LCD_data(ucharvalue)//写数据函数{Read_busy();RS=1;//选择数据RW=0;LCD_databus=value;EN=1;//EN由1----0锁存有效数据_
4、nop_();_nop_();EN=0;}voidSet_page(ucharpage)//设置“页”LCD12864共8页,一页是8行点阵点{page=0xb8
5、page;//页的首地址为0xB8write_LCD_command(page);}voidSet_line(ucharstartline)//设置显示的起始行{startline=0xC0
6、startline;//起始行地址为0xC0write_LCD_command(startline);//设置从哪行开始:共0--63;一般从0行开始
7、显示}voidSet_column(ucharcolumn)//设置显示的列{column=column&0x3f;//列的最大值为64column=0x40
8、column;//列的首地址为0x40write_LCD_command(column);//规定显示的列的位置}voidSetOnOff(ucharonoff)//显示开关函数:0x3E是关显示,0x3F是开显示{onoff=0x3e
9、onoff;//onoff:1---开显示;0---关显示write_LCD_command(onoff);
10、}voidSelectScreen(ucharscreen)//选择屏幕{switch(screen){case0:CS1=0;CS2=0;break;//全屏case1:CS1=0;CS2=1;break;//左半屏case2:CS1=1;CS2=0;break;//右半屏default:break;}}voidClearScreen(ucharscreen)//清屏函数{uchari,j;SelectScreen(screen);//0--全屏;1---左半屏;2---右半屏for(i=0;i<8
11、;i++)//控制页数0-7,共8页{Set_page(i);Set_column(0);for(j=0;j<64;j++)//控制列数0-63,共64列{write_LCD_data(0x00);//写入0,地址指针自加1}}}voidinit_LCD()//LCD的初始化{SetOnOff(1);//开显示SelectScreen(0);ClearScreen(0);//清屏Set_line(0);//开始行:0}voidDisplay_HZ(ucharscreen,ucharpage,uchar
12、column,uchar*p){uchari;SelectScreen(screen);Set_page(page);//写上半页:16*8Set_column(column*16);//控制列for(i=0;i<16;i++)//控制16列的数据输出{write_LCD_data(p[i]);//汉字的上半部分}Set_page(page+1);//写下半页:16*8Set_column(column*16);//控制列for(i=0;i<16;i++
此文档下载收益归作者所有