12864程序_免费下载.doc_第1页
12864程序_免费下载.doc_第2页
12864程序_免费下载.doc_第3页
12864程序_免费下载.doc_第4页
12864程序_免费下载.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

12864程序_免费下载.doc.doc 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序如下:#include #include #include #define uchar unsigned char#define uint unsigned int/*LCD读写控制字*/ /左半部#define LLCD_CMD_WR PBYTE0x10 /写命令rs = 0 wr = 0 #define LLCD_CMD_RD PBYTE0x11 /读命令rs = 0 wr = 1 #define LLCD_DATA_WR PBYTE0x12 /写数据rs = 1 wr = 0#define LLCD_DATA_RD PBYTE0x13 /读数据rs = 1 wr = 1 /右半部#define RLCD_CMD_WR PBYTE0x20 /同上,为LCD右半部分的读写指令#define RLCD_CMD_RD PBYTE0x21#define RLCD_DATA_WR PBYTE0x22#define RLCD_DATA_RD PBYTE0x23#define LCD_DOT_MAXX 128 /此LCD为128X64,分左右两部分,每部分64X64#define LCD_DOT_MAXY 64 #define LCD_MAXX 8 /以16为一个单位,行上最多可显示8个单位#define LCD_MAXY 4 /列上可以显示4个单位,整个屏幕可显示8x4 32个中文字符sbit busy = P07;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit K5=P14;/*数组定义*/code uchar hanzi1 =/*- 文字: 电 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,/*- 文字: 子 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*- 文字: 信 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,/*- 文字: 息 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0x00,0xFC,0x54,0x54,0x56,0x55,0x54,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x01,0x3D,0x41,0x41,0x45,0x59,0x41,0x41,0x71,0x00,0x08,0x30,0x00,/*- 文字: 工 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*- 文字: 程 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,;code uchar bmp =/*- 宽度x高度=32x32 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x78,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x7C,0x3F,0x3F,0x3B,0x39,0x3B,0x3F,0xFF,0xFC,0xF0,0xB0,0xB0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,0x70,0x30,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFE,0xDF,0xE7,0xE3,0x77,0x7F,0x7E,0x3C,0x3C,0x3C,0x7C,0xFE,0xEE,0xC7,0xFF,0xFF,0xFB,0xC3,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,;/*变量定义*/uchar x,y;struct cursortypeuchar x,y,side;cousor;/*函数定义*/void lcd_cmd_wr(uchar cmdcode, uchar right); /写命令void lcd_data_wr(uchar ldata, uchar right); /写数据void lcd_busy_rd(uchar right); /读状态void chk_busy(uchar right);void lcd_hanzi_wr(uchar posx,uchar posy,uchar *hanzi);void lcd_str_wr(uchar row,uchar col,uchar n,uchar *str);void lcd_bmp_wr(uchar posx,uchar posy,uchar wth,uchar hgh,uchar *bmp);void lcd_moveup();void lcd_movedown();void lcd_moveright();void lcd_init();void delay(uint nms); /延时 n ms/*主函数*/void main()lcd_init();lcd_str_wr(0,1,6,hanzi1); / 行,左右LCD的汉字个数( 0; nms-) for(i = 0; i 500; i+);void lcd_init() /LCD初始化uint k;lcd_cmd_wr(0x3e+1,0); /左半部显示开lcd_cmd_wr(0xc0+0,0); /左半部顶行为第0行lcd_cmd_wr(0xb8+0,0); /设定左半部页地址lcd_cmd_wr(0x40+0,0); /设定左半部列地址lcd_cmd_wr(0x3e+1,1); /右半部显示开lcd_cmd_wr(0xc0+0,1); /右半部顶行设定为第0行lcd_cmd_wr(0x40+0,1); /设定列地址lcd_cmd_wr(0xb8+0,1); /设定页地址for(k = 0; k 256; k+) /LCD屏初始化,分上下两部分进行初始化 lcd_data_wr(0x00,0);lcd_data_wr(0x00,1);/左屏lcd_cmd_wr(0xb8+4,0);lcd_cmd_wr(0x40+0,0);/右屏lcd_cmd_wr(0xb8+4,1);lcd_cmd_wr(0x40+0,1);for(k = 0; k 256; k+) /这个FOR 循环语句是为了清除不显示字的部分 lcd_data_wr(0x00,0); lcd_data_wr(0x00,1); void lcd_hanzi_wr(uchar posx,uchar posy,uchar * hanzi) /对LCD在指定位置写入单个汉字uchar i;if(posy 4) /posy 4 在左半部写 lcd_cmd_wr(0xb8+2*posx,0); / 左半部页地址 相当于是行扫描 /上半部分的汉字 lcd_cmd_wr(0x40+16*posy,0); / 左半部列地址 列扫描 for(i = 0; i 16; i+) / lcd_data_wr(hanzii,0); lcd_cmd_wr(0xb8+2*posx+1,0); / 同上,/下半部份的汉字 lcd_cmd_wr(0x40+16*posy,0); /因为一个汉字处于不同的页,所以要分上下部分进行扫描 for(i = 16; i 32; i+) lcd_data_wr(hanzii,0); else /否则在右半部写 lcd_cmd_wr(0xb8+posx*2,1); lcd_cmd_wr(0x40+16*(posy-4),1); for(i = 0; i 16; i+) lcd_data_wr(hanzii,1); lcd_cmd_wr(0xb8+2*posx+1,1); lcd_cmd_wr(0x40+16*(posy-4),1); for(i = 16; i 32; i+) lcd_data_wr(hanzii,1); void lcd_str_wr(uchar row,uchar col,uchar n,uchar *str) /行,左右LCD的汉字个数(4就写在左边.否则就写在右边),表示这一行写几个汉字,第几个汉字的代码uchar i;for(i = 0 ; i 7) row+; /表示行加一行 col = col - 8; /换了一行,就相应的每行汉字的计算个数也应该相应的从0开始重新计数 lcd_hanzi_wr(row,col,str+i*32); col+; void lcd_bmp_wr(uchar posx,uchar posy,uchar wth,uchar hgh,uchar *bmp) /posx 取值为03,posy = 0128,图片的长wth和宽hgh必须为8的倍数uchar i,j; /这里行posx如果不取8的倍数,则要另外算hgh =hgh/8;for(i = 0; i hgh; i+) if(posy 64) / lcd_cmd_wr(0xb8+posx+i,0); /汉字的上半部份,相当于图片占用的第一个汉字的上半 ,加指明是在LCD的左,; lcd_cmd_wr(0x40+posy,0); / 下半部份,. . for(j = 0; j wth;j+) lcd_data_wr(bmp32*i+j,0); /相当于开个汉字进行扫描的一行,这时两个代码才是一个点阵的一行,不是一行汉字 else lcd_cmd_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论