Protues中单片机驱动12864仿真.docx
- 文档编号:4436428
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:21
- 大小:218.54KB
Protues中单片机驱动12864仿真.docx
《Protues中单片机驱动12864仿真.docx》由会员分享,可在线阅读,更多相关《Protues中单片机驱动12864仿真.docx(21页珍藏版)》请在冰豆网上搜索。
Protues中单片机驱动12864仿真
Protues中单片机驱动lcd12864液晶显示屏仿真:
Protues中lcd12864是无字库的,要让它显示一个数字或者汉字或者图片,都需要先对其取模。
那么首先介绍介绍一款比较好用的取模软件,XX搜索“zimoV2.2”就可以了。
下面先介绍这个取模软件的使用方法:
1.打开软件,界面如下:
2.通常我们显示汉字用的是16×16的像素大小,而显示数字用的是16×8的格式,那么选择文字输入区字体选择,弹出的界面选择如下:
3.其次在“其他选项”中,选择如下:
4.上面设置好之后我们就可以在文字输入区输入汉字了,以“Ctrl”+“Enter”结束:
5.然后点击“C51格式”,在点阵生成区就会出现相应的模如下,我们可以把每个汉字对应的模存放在相应的数组中:
上面为取模软件的使用方法,下面开始正式教给读者单片机驱动lcd12864液晶显示屏的方法,在这之前,需要对无字库lcd12864液晶显示屏有个基础的了解,相关引脚如下:
管脚名称
LEVER
管脚功能描述
VSS
0
电源地
VDD
+5.0V
电源电压
V0
-
液晶显示器驱动电压
D/I(RS)
H/L
D/I=“H”,表示DB7∽DB0为显示数据
D/I=“L”,表示DB7∽DB0为显示指令数据
R/W
H/L
R/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
E
H/L
R/W=“L”,E信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0
DB0
H/L
数据线
DB1
H/L
数据线
DB2
H/L
数据线
DB3
H/L
数据线
DB4
H/L
数据线
DB5
H/L
数据线
DB6
H/L
数据线
DB7
H/L
数据线
CS1
H/L
H:
选择芯片(右半屏)信号
CS2
H/L
H:
选择芯片(左半屏)信号
RET
H/L
复位信号,低电平复位
VOUT
-10V
LCD驱动负电压
LED+
-
LED背光板电源
LED-
-
LED背光板电源
通过控制CS1和CS2可以用来使能左半屏和右半屏,两个半屏的页和列都是相同的,如下图:
根据上图,如果我们需要在某个位置显示相应内容,如在左半屏的第0页和第2页的第0列至第15列的区域里显示汉字“农”。
按照上面的描述,我们就不需要在深究lcd12864液晶显示屏的内部原理以及相关指令,我们需要一个封装好的C模块文件(API),直接调用对应的函数即可。
具体如下:
(1)假设有一个已经编写好的函数LCDWriteNum(charleftright,charpage,charcolumn,charnum[]),
参数leftright用来使能左半屏或者右半屏(‘L’或者’R’),
参数page用来选择在哪一页显示(0~7),
参数column用来选择在哪一列显示(0~64),
参数num[]即为待显示数字的模。
这样我们要在12864的左半屏第2页和第3页的第3列至第10列的16×8区域里显示数字5,可以调用函数LCDWriteNum(‘L’,2,3,num5[])即可(num5[]数组为数字5的模)。
(2)假设有一个已经编写好的函数LCDWriteNumBlack(charleftright,charpage,charcolumn,charnum[]),
参数leftright用来使能左半屏或者右半屏(‘L’或者’R’),
参数page用来选择在哪一页显示(0~7),
参数column用来选择在哪一列显示(0~64),
参数num[]即为待显示数字的模。
这样我们要在12864的左半屏第2页和第3页的第3列至第10列的16×8区域里以黑色背景来显示数字5,可以调用函数LCDWriteNumBlack(‘L’,2,3,num5[])即可(num5[]数组为数字5的模)。
(3)假设有一个已经编写好的函数LCDWriteChinese(charleftright,charpage,charcolumn,charchinese[]),
参数leftright用来使能左半屏或者右半屏(‘L’或者’R’),
参数page用来选择在哪一页显示(0~7),
参数column用来选择在哪一列显示(0~64),
参数num[]即为待显示汉字的模。
这样我们要在12864的左半屏第2页和第3页的第3列至第10列的16×8区域里显示汉字“农”,可以调用函数LCDWriteChinese(‘L’,2,3,nong[])即可(nong[]数组为汉字“农”的模)。
(4)假设有一个已经编写好的函数LCDWriteChineseBlack(charleftright,charpage,charcolumn,charchinese[]),
参数leftright用来使能左半屏或者右半屏(‘L’或者’R’),
参数page用来选择在哪一页显示(0~7),
参数column用来选择在哪一列显示(0~64),
参数num[]即为待显示汉字的模。
这样我们要在12864的左半屏第2页和第3页的第3列至第10列的16×8区域里以黑色背景来显示汉字“农”,可以调用函数LCDWriteChineseBlack(‘L’,2,3,nong[])即可(nong[]数组为汉字“农”的模)。
下面附上lcd12864模块代码:
lcd12864.h文件内容:
#ifndef__LCD12864_H
#define__LCD12864_H
#include
#defineLCDDispOff0x3e
#defineLCDDispOn0x3f
#definePageAdd0xb8//页地址
#defineLCDColAdd0x40//列地址
#defineStartLine0xc0//行地址
#defineLCDDataP0
sbitLCDCs1=P2^0;//片选1
sbitLCDCs2=P2^1;//片选2
sbitLCDRet=P2^2;//复位端
sbitLCDRw=P2^3;//“数据/指令”选择
sbitLCDRs=P2^4;//“读/写”选择
sbitLCDEn=P2^5;//“读/写”使能
/*函数声明,供模块内部使用*/
staticvoidLCDDelay(chart);//延时函数
staticvoidCheckState();//检测忙标志
staticvoidwrite_com(charcmdcode);//写指定
staticvoidwrite_data(charLCDDispdata);//写数据
/*函数声明,外部调用*/
voidLCDInit();//12864初始化
voidLCDClear();//12864清屏
voidLCDWriteChinese(charleftright,charpage,charcolumn,charchinese[]);//12864指定页指定列显示一个汉字
voidLCDWriteChineseBlack(charleftright,charpage,charcolumn,charchinese[]);//12864指定页指定列显示一个汉字,以黑色背景白色文本显示
voidLCDWriteNum(charleftright,charpage,charcolumn,charnum[]);//12864指定屏指定页指定列显示一个数字
voidLCDWriteNumBlack(charleftright,charpage,charcolumn,charnum[]);//12864指定屏指定页指定列显示一个数字,以黑色背景白色文本显示
#endif
lcd12864.c文件内容:
#include"lcd12864.h"
voidLCDDelay(chart)
{
chari,j;
for(i=0;i for(j=0;j<10;j++); } voidCheckState() { chardat; LCDRs=0; LCDRw=1; do { dat=0x00; LCDEn=1; LCDDelay (2); LCDEn=0; dat=0x80&dat; } while(! (dat==0x00)); } voidwrite_com(charcmdcode) { CheckState(); LCDRs=0; LCDRw=0; LCDData=cmdcode; LCDDelay (2); LCDEn=1; LCDDelay (2); LCDEn=0; } voidwrite_data(charLCDDispdata) { CheckState(); LCDRs=1; LCDRw=0; LCDData=LCDDispdata; LCDDelay (2); LCDEn=1; LCDDelay (2); LCDEn=0; } voidLCDInit() { LCDDelay(100); LCDCs1=1; LCDCs2=1; LCDDelay(100); write_com(LCDDispOff); write_com(PageAdd+0); write_com(StartLine+0); write_com(LCDColAdd+0); write_com(LCDDispOn); } voidLCDClear() { chark,j; LCDCs1=0; LCDCs2=0; write_com(PageAdd+0); write_com(LCDColAdd+0); for(k=0;k<8;k++) { write_com(PageAdd+k); for(j=0;j<64;j++) { write_com(LCDColAdd+j); write_data(0x00); } } } voidLCDWriteChinese(charleftright,charpage,charcolumn,charchinese[]) { chari=0,j=0; if(leftright=='L') { LCDCs1=0; LCDCs2=1; } elseif(leftright=='R') { LCDCs1=1; LCDCs2=0; } for(i=0;i<2;i++) { write_com(PageAdd+page+i); write_com(LCDColAdd+column); for(j=0;j<16;j++) { write_data(chinese[16*i+j]); } } } voidLCDWriteChineseBlack(charleftright,charpage,charcolumn,charchinese[]) { chari=0,j=0; if(leftright=='L') { LCDCs1=0; LCDCs2=1; } elseif(leftright=='R') { LCDCs1=1; LCDCs2=0; } for(i=0;i<2;i++) { write_com(PageAdd+page+i); write_com(LCDColAdd+column); for(j=0;j<16;j++) { write_data(~chinese[16*i+j]); } } } voidLCDWriteNum(charleftright,charpage,charcolumn,charnum[]) { chari=0,j=0; if(leftright=='L') { LCDCs1=0; LCDCs2=1; } elseif(leftright=='R') { LCDCs1=1; LCDCs2=0; } for(i=0;i<2;i++) { write_com(PageAdd+page+i); write_com(LCDColAdd+column); for(j=0;j<8;j++) { write_data(num[8*i+j]); } } } voidLCDWriteNumBlack(charleftright,charpage,charcolumn,charnum[]) { chari=0,j=0; if(leftright=='L') { LCDCs1=0; LCDCs2=1; } elseif(leftright=='R') { LCDCs1=1; LCDCs2=0; } for(i=0;i<2;i++) { write_com(PageAdd+page+i); write_com(LCDColAdd+column); for(j=0;j<8;j++) { write_data(~num[8*i+j]); } } } 现在我们可以小试牛刀了,把上面两个文件加入工程里,在main.c文件里添加如下代码: #include"lcd12864.h" /*汉字”安“,格式16*16*/ charcodean[]={0x80,0x90,0x8C,0x84,0x84,0x84,0xF5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x80,0x00, 0x00,0x80,0x80,0x84,0x46,0x49,0x28,0x10,0x10,0x2C,0x23,0x40,0x80,0x00,0x00,0x00}; /*汉字”徽“,格式16*16*/ charcodehui[]={0x10,0x88,0xC4,0x23,0xAE,0x68,0x2F,0x28,0xAE,0x20,0xD8,0x17,0x10,0xF0,0x10,0x00, 0x01,0x00,0xFF,0x48,0x29,0x8D,0xFB,0x09,0xAC,0x48,0x37,0x08,0x36,0x41,0x80,0x00}; /*汉字”农“,格式16*16*/ charcodenong[]={0x20,0x18,0x08,0x08,0x08,0xC8,0x38,0xCF,0x08,0x08,0x08,0x08,0xA8,0x18,0x00,0x00, 0x10,0x08,0x04,0x02,0xFF,0x40,0x20,0x00,0x03,0x04,0x0A,0x11,0x20,0x40,0x40,0x00}; /*汉字”业“,格式16*16*/ charcodeye1[]={0x00,0x10,0x60,0x80,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xC0,0x30,0x00,0x00, 0x40,0x40,0x40,0x43,0x40,0x7F,0x40,0x40,0x40,0x7F,0x42,0x41,0x40,0x40,0x40,0x00}; /*汉字”大“,格式16*16*/ charcodeda[]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00}; /*汉字”学“,格式16*16*/ charcodexue[]={0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00, 0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00}; /*汉字”电“,格式16*16*/ charcodedian[]={0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00, 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00}; /*汉字”气“,格式16*16*/ charcodeqi1[]={0x20,0x10,0x4C,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x04,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00}; /*汉字”工“,格式16*16*/ charcodegong[]={0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00}; /*汉字”程“,格式16*16*/ charcodecheng[]={0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E,0x22,0x22,0x22,0x22,0x22,0x3E,0x00,0x00, 0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00}; /*汉字”及“,格式16*16*/ charcodeji[]={0x00,0x00,0x02,0x02,0xFE,0x42,0x82,0x02,0x42,0x72,0x4E,0x40,0xC0,0x00,0x00,0x00, 0x80,0x40,0x30,0x0C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x46,0x41,0x80,0x80,0x00}; /*汉字”其“,格式16*16*/ charcodeqi2[]={0x00,0x04,0x04,0x04,0xFF,0x24,0x24,0x24,0x24,0x24,0xFF,0x04,0x04,0x04,0x00,0x00, 0x08,0x08,0x88,0x48,0x2F,0x09,0x09,0x09,0x09,0x09,0x2F,0x48,0x88,0x08,0x08,0x00}; /*汉字”自“,格式16*16*/ charcodezi[]={0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00}; /*汉字”动“,格式16*16*/ charcodedong[]={0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00, 0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00}; /*汉字”化“,格式16*16*/ charcodehua[]={0x00,0x80,0x60,0xF8,0x07,0x00,0x00,0x00,0xFF,0x40,0x20,0x10,0x08,0x04,0x00,0x00, 0x01,0x00,0x00,0xFF,0x00,0x04,0x02,0x01,0x3F,0x40,0x40,0x40,0x40,0x40,0x78,0x00}; /*汉字”专“,格式16*16*/ charcodezhuan[]={0x40,0x40,0x48,0x48,0x48,0xC8,0x78,0x4F,0x48,0x48,0x48,0x48,0x48,0x40,0x40,0x00, 0x00,0x00,0x00,0x00,0x03,0x12,0x12,0x22,0x22,0x52,0x8A,0x06,0x00,0x00,0x00,0x00}; /*汉字”业“,格式16*16*/ charcodeye2[]={0x00,0x10,0x60
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Protues 单片机 驱动 12864 仿真
![提示](https://static.bdocx.com/images/bang_tan.gif)