矩阵键盘控制12864显示最经典程序

合集下载

LCD12864显示矩阵键盘输入的任意两位数

LCD12864显示矩阵键盘输入的任意两位数
voiddelayuint写指令程序指令由3个字节组成第一个为写指令第二个为指令高4位第三个为指令低4voidsendcmducharcmddatucharidat
/**********************************************************
用矩阵按键输入任意两位数并显示在12684上。如先输入2,再输入5
send_dat(dis2[dis_buf[0]]);
}
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat&=0xf0;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
while(1)
{
key_dispos();
}
}
void display()
{
uinti;
send_cmd(0x80);//第一行显示
i=0;
while(dis1[i]!='\0')
{
send_dat(dis1[i]);
i++;
}
send_cmd(0x90);//第二行显示数据
send_dat(dis2[dis_buf[1]]);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;

12864液晶屏幕使用说明及程序

12864液晶屏幕使用说明及程序

12864使用说明一、串/并接口1.1 串口接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。

1.2 并行接口管脚信号*注释1:如在实际应用中仅使用并口通讯模式,可将PSB 接固定高电平。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK 用焊锡短接。

二、模块主要硬件构成说明控制器接口信号说明:2.1、RS,R/W的配合选择决定控制界面的4种模式:2.2、E信号●忙标志BFBF 标志提供内部工作情况.BF=1 表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0 时, 模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF 读到DB7 总线,从而检验模块之工作状态.●字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192 个此触发器是用于模块屏幕显示开和关的控制。

DFF=1 为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF)。

DFF 的状态是指令DISPLAY ON/OFF 和RST 信号控制的。

●显示数据RAM(DDRAM)模块内部显示数据 RAM 提供 64×2 个位元组的空间,最多可控制 4 行 16 字(64 个字)的中文字型显示,当写入显示数据 RAM 时,可分别显示 CGROM 与CGRAM 的字型;此模块可显示三种字型,分别是半角英、数字型(16*8)、CGRAM 字型及 CGROM 的中文字型。

三种字型的选择,由在 DDRAM 中写入的编码选择,在0000H—0006H 的编码中(其代码分别是0000、0002、0004、0006 共4 个)将选择 CGRAM 的自定义字型,02H—7FH 的编码中将选择半角英数字的字型,至于A1 以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。

12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

这个程序写得很好,自己也是看的别人写的很好的程序,但是它代码不够完整,注释不详细,经过自己的修改加以完善。

另外我发现很多的测试代码都没有附上测试代码效果图,在本人的代码下面有自己拍的效果图,填补不足之处。

自己在找资料的过程中花掉很多的财富值,如果大家看得起该代码请评五分加以下载,在下感激不尽!/*******************************************程序名称:12864液晶经典驱动程序(带中文字库)功能:12864测试程序修改作者:王程修改时间:2014年2月5日23:22:32********************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned int// P0 为数据口sbit LCD_RS=P2^0; //数据、命令选择端口sbit LCD_RW=P2^1; //液晶读写控制sbit LCD_EN=P2^2; //液晶使能控制sbit PSB = P2^4; //模式选择1为并行0为串行sbit RES = P2^5;//复位端口低电平复位,上电之前进行复位,为了稳定!unsigned char code DAT[] = "我爱我家"; //测试显示的汉字,下面的A为测试显示的英文/*******************************************函数名称:Delay_1ms (晶振为12M)功能:延时约1ms的时间参数:无返回值:无********************************************/void delay_1ms(uint x){uint i,j;for(j = 0;j < x;j++)for(i=0;i<110;i++);}/*******************************************函数名称:write_cmd功能:向液晶中写控制命令参数:cmd--控制命令返回值:无********************************************/void write_cmd(uchar cmd){uchar lcdtemp = 0;LCD_RS=0;LCD_RW=1;do //经典判忙方式,精简{LCD_EN=1;delay_1ms(2);lcdtemp = P0;LCD_EN=0;}while(lcdtemp & 0x80);LCD_RW=0;P0 = cmd;LCD_EN=1;delay_1ms(5);LCD_EN=0;}/*******************************************函数名称:write_data功能:向液晶中写显示数据参数:dat--显示数据返回值:无********************************************/ void write_data(uchar dat){uchar lcdtemp = 0;LCD_RS=0;LCD_RW=1;do //经典判忙方式{LCD_EN=1;delay_1ms(2);lcdtemp = P0;LCD_EN=0;}while(lcdtemp & 0x80);LCD_RS=1;LCD_RW=0;P0 = dat;LCD_EN=1;delay_1ms(5);LCD_EN=0;}/*******************************************函数名称:lcd_int功能:初始化液晶模块参数:无返回值:无********************************************/void lcd_int(void){delay_1ms(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式delay_1ms(1); //延时RES=0; //复位delay_1ms(1); //延时RES=1; //复位置高delay_1ms(10);write_cmd(0x30); //基本指令集delay_1ms(5);write_cmd(0x30); //基本指令集delay_1ms(5);write_cmd(0x08); // 地址归位delay_1ms(5);write_cmd(0x10); //光标设置delay_1ms(5);write_cmd(0x0c); //整体显示打开,游标关闭delay_1ms(5);write_cmd(0x01); //清除显示delay_1ms(5);write_cmd(0x06); //游标右移delay_1ms(5);write_cmd(0x80); //设定显示的起始地址delay_1ms(5);}函数名称:main功能:测试1602初始化函数模块参数:无返回值:无********************************************/void main(){uchar i;char *a = DAT;//使用指针,指向字符串地址lcd_int();write_data('A'); //每个显示都是用的两个字节,必须写两次write_data(' ');//再写一次,不然乱显示(如果不加就再显示一个别的字母)for(i=0;i<8;i++){write_data(*a);//将地址当作数据传给12864a++;//一个汉字传送两次,因为一个汉字占用两个字节,两次传完}write_cmd(0x90);//一行显示八个汉字,第一行0x80-87,第二行0x90开始a = DAT;for(i=0;i<8;i++){write_data(*a);a++;}while(1); //停住,不然重复的初始化显示,作为测试用}/*******************************************代码测试效果图片两两张由于曝光度影响,拍了两张********************************************/。

串口12864液晶&矩阵键盘驱动

串口12864液晶&矩阵键盘驱动
#include<reg52.h>
#define U8 unsigned char
#define U16 unsigned int
#include<intrins.h>
#define uchar unsigned char
sbit sclk=P0^0; //时钟数据传送端口
sbit sid=P0^1; //串行数据
send_dat(cmd&0xf0); //
send_dat((cmd&0x0f)<<4); //
}
void write_char(U8 dat)
{
check_busy();
send_dat(0xfa);//rw=0;rs=1
send_dat(dat&0xf0);
sclk=1;
}
}
U8 get_byte() //获取数据
{
U8 i,temp1=0,temp2=0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
sclk = 0;
send_cmd(0X98|x_add);break;
default:break;
}
}
void lcd_wstr(U8 y_add , U8 x_add , U8 *str) //
{
U8 i;
lcd_pos(y_add , x_add);
lcd_pos(y_add , x_add);
d[4]=figer%10;
d[3]=figer%100/10;
d[2]=figer%1000/100;

最容易理解的点阵式12864LCD指令说明书

最容易理解的点阵式12864LCD指令说明书

点阵式128*64LCD显示原理(不带字库)在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。

对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。

而对于中文,常用却有6000以上,于是我们的DO S前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的码。

而剩下的低128位则留给英文字符使用,即英文的码。

那么,得到了汉字的码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示:图2 “你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵)汉字。

管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD +5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏)信号16 CS2 H/L H:选择芯片(左半屏)信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED+ - LED背光板电源20 LED- - LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。

12864液晶按键菜单程序

12864液晶按键菜单程序
{
write_dat(dis3[i]);
}
write_cmd(0x98);
for(i=0;i<16;i++)
{
write_dat(dis4[i]);
}
}
if(count1==2) //按下选择按钮2次
uchar code dis1_[] = {"系统初始化. "};
uchar code dis2_[] = {"系统初始化.. "};
uchar code dis3_[] = {"系统初始化.. "};
uchar code dis4_[] = {"按选择键开始! "};
uchar code dis1_6[] = {" 摄像头 "};
uchar code dis2_6[] = {" "};
uchar code dis3_6[] = {" "};
uchar code dis4_6[] = {"保存拍照——返回 "};
write_cmd(0x90);
for(i=0;i<16;i++)
{
write_dat(dis3_[i]);
}
delay_1ms(500);
write_cmd(0x90);
for(i=0;i<16;i++)
{
write_dat(dis4_[i]);
}
write_cmd(0x30); //基本指令操作
delay_1ms(2);
write_cmd(0x0C); //显示开,关光标

12864点阵液晶显示测试程序(带字库)

12864点阵液晶显示测试程序(带字库)

12864点阵液晶显示测试程序(带字库)接口说明1 12864-1测试程序:#include <reg52.h>#define uint unsigned int#define uchar unsigned char#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1sbit rs = P1^1; //H=data; L=command;sbit rw = P1^2; //H=read; L=write;sbit e = P1^3; //input enable;sbit psb= P1^4; //H=并口; L=串口;sbit rst= P1^5; //Reset Signal 低电平有效sbit busy=P2^7; //lcd busy bitvoid wr_lcd (uchar dat_comm,uchar content);void chk_busy (void);void delay (uint us);uchar code tab1[]={" 床前明月光, "" 疑是地上霜, ""举头望明月, ""低头思故乡。

"};uchar code tab31[]={"你的选择""没有错"};uchar code tab32[]={/*-- 调入了一幅图像:D:\Backup\桌面\未命名1.bmp --*//*-- 宽度x高度=128x32 --*/0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x06,0x06,0xFF,0xFF, 0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x04,0x02,0xFF,0xFF, 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x FF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x04,0x83,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x06,0x07,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x24,0xE6,0x3F,0xFF,0xFF, 0xFF,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x64,0xE4,0x3F,0xFF,0xFF, 0xFF,0x03,0xF7,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x0F,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x02,0xFF,0xFF,0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x82,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFC,0xFF,0xFF,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x79,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};uchar code tab5[]={/*-- 调入了一幅图像:D:\Backup\桌面\未命名.bmp --*//*-- 宽度x高度=128x64 --*/0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x06,0x06,0xFF,0xFF, 0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x04,0x02,0xFF,0xFF, 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x04,0x83,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x06,0x07,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x24,0xE6,0x3F,0xFF,0xFF, 0xFF,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x64,0xE4,0x3F,0xFF,0xFF, 0xFF,0x03,0xF7,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x0F,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x02,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x82,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFC,0xFF,0xFF,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x79,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFB,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };/*------------------初始化-----------------*/void init_lcd (void){rst=1;psb=1;wr_lcd (comm,0x30); /*30---基本指令动作*/wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/wr_lcd (comm,0x06); /*光标的移动方向*/wr_lcd (comm,0x0c); /*开显示,关游标*/}/*---------------显示汉字或字符----------------*/ void chn_disp (uchar code *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);for (j=0;j<4;j++){for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}}/*-----------上半屏显示汉字或字符------------*/ void chn_disp1 (uchar code *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);j=0;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);wr_lcd (comm,0x90);j=1;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}/*----------------显示图形-----------------*/void img_disp (uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x1+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j-32);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*-------------下半屏显示图形--------------*/ void img_disp1 (uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*--------------显示点阵----------------*/void lat_disp (uchar data1,uchar data2) {uchar i,j,k,x;x=x1;for(k=0;k<2;k++){for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data1);}for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2+1);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data2);wr_lcd (dat,data2);}}x=x2;}wr_lcd (comm,0x36);}/*-----------------------------------------------*///当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) {uchar i,j;for(j=0;j<yl;j++){for(i=0;i<xl;i++){wr_lcd (comm,0x34);wr_lcd (comm,y0+j);wr_lcd (comm,x0+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data2);}}wr_lcd (comm,0x36);}/*--------------清DDRAM------------------*/void clrram (void){wr_lcd (comm,0x30);wr_lcd (comm,0x01);}/*---------------------------------------*/void wr_lcd (uchar dat_comm,uchar content) {chk_busy ();if(dat_comm){rs=1; //datarw=0; //write}else{rs=0; //commandrw=0; //write}P2=content; //output data or comme=1;;e=0;}void chk_busy (void){P2=0xff;rs=0;rw=1;e =1;while(busy==1);e =0;}void delay (uint us) //delay time{while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<15;j++)delay(1);}/*------------------主程序--------------------*/void main (){SP=0x5f;init_lcd ();while (1){lat_disp (0x00,0x00);chn_disp (tab1);con_disp (0xff,0xff,0x8c,0x80,2,16);delay1 (28000);clrram();lat_disp (0xcc,0xcc);delay1 (28000);lat_disp (0x00,0x00);chn_disp1 (tab31);img_disp1 (tab32);delay1 (28000);clrram();lat_disp (0xff,0x00);delay1 (28000);img_disp (tab5);delay1 (28000);}}。

AVR控制矩阵键盘,12864显示简单计算器

AVR控制矩阵键盘,12864显示简单计算器
{
delay(1);//延时消抖
if((PINB&0x01)==0)//确实有按键按下
{ n++;
delay(1);//延时消抖
key=0;
write_data(0x30+key);
while((!PINA&0X01));
if(s==1)
{
{h++;}
if(s!=1)
{
w++;}
}
}
// 按键10加法按键
if((PINB&0x04)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x04)==0)//确实有按键按下
#include<de<macros.h>
#define uint unsigned int
#define uchar unsigned char
#define RS_0 (PORTA&=~BIT(7))
#define RS_1 (PORTA|=BIT(7))
delay(1);//延时消抖
// 按键8
if((PINB&0x01)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x01)==0)//确实有按键按下
{ n++;
delay(1);//延时消抖
key=2;
write_data(0x30+key);
while((!PINA&0X04));//等待按键松开
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include <reg52.h>//这个程序的功能:用4*4的矩阵键盘(接P3口)按键盘k1——k16中的任何一个键ki
#include <intrins.h>//12864液晶上显示数字i-1 (液晶数据口接P0)
#define uint unsigned int//键盘扫描的思想是将行设置为低,列设置为高,来读取P3口的值,就能知道是哪个按键按下了
#define uchar unsigned char
#define LCDdata P0
sbit E = P2^7;
sbit RW = P2^6;
sbit RS = P2^5;
void init();
void delayms(uint x);
void displaykey();
void write_com(uchar com);//写命令
void write_data(uchar date);//写数据
uchar temp;
//--------------主函数-----------------
void main()
{
init();// P3=0xfe;//P3=0xfd;//P3=0xfb;//P3=0xf7;
while(1)
{
displaykey();
}
}
//-------------液晶初始化----------------
void init()
{
write_com(0x01);
write_com(0x02);
write_com(0x06);
write_com(0x0e);
}
//------------毫秒延时---------------
void delayms(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//------------写命令-----------------
void write_com(uchar com)
{
RS = 0;
RW = 0;
E = 0;
LCDdata = com;
E = 1;
delayms(5);
E = 0;
}
//-------------写数据------------------
void write_data(uchar date)
{
RS = 1;
RW = 0;
E = 0;
LCDdata = date;
E = 1;
delayms(5);
E = 0;
}
//----
void displaykey()
{ //****************************判断第一行的键盘
P3=0xfe; temp=P3; temp=temp&0xf0;
while(temp!=0xf0)//判断是否有键盘按下为真有键盘按下
{ delayms(50); temp=P3; temp=temp&0xf0;
while(temp!=0xf0)//再次判断是否有键盘按下为真有键盘按下
{ temp=P3;
switch(temp)
{
case 0xee:write_com(0x80);write_data('0');write_com(0x81);write_data(' ');break;
case 0xde:write_com(0x80);write_data('1');write_com(0x81);write_data(' ');break;
case 0xbe:write_com(0x80);write_data('2');write_com(0x81);write_data(' ');break;
case 0x7e:write_com(0x80);write_data('3');write_com(0x81);write_data(' ');break;
}break;//这个break很重要不能丢下,若丢下会这这个中退步出来
}
}
//******************************判断第二行的键盘
P3=0xfd; temp=P3; temp=temp&0xf0;
while(temp!=0xf0)
{ delayms(50); temp=P3; temp=temp&0xf0;
while(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xed:write_com(0x80);write_data('4');write_com(0x81);write_data(' ');break;
case 0xdd:write_com(0x80);write_data('5');write_com(0x81);write_data(' ');break;
case 0xbd:write_com(0x80);write_data('6');write_com(0x81);write_data(' ');break;
case 0x7d:write_com(0x80);write_data('7');write_com(0x81);write_data(' ');break;
} break;
}
}
//******************************判断第三行的键盘
P3=0xfb; temp=P3; temp=temp&0xf0;
while(temp!=0xf0)
{ delayms(50); temp=P3; temp=temp&0xf0;
while(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xeb:write_com(0x80);write_data('8');write_com(0x81);write_data(' ');break;
case 0xdb:write_com(0x80);write_data('9');write_com(0x81);write_data(' ');break;
case
0xbb:write_com(0x80);write_data('1');write_com(0x81);write_data('0');break;
case
0x7b:write_com(0x80);write_data('1');write_com(0x81);write_data('1');break;
}break;
}
}
//******************************判断第四行的键盘
P3=0xf7; temp=P3; temp=temp&0xf0;
while(temp!=0xf0)
{ delayms(50); temp=P3; temp=temp&0xf0;
while(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case
0xe7:write_com(0x80);write_data('1');write_com(0x81);write_data('2');break;
case
0xd7:write_com(0x80);write_data('1');write_com(0x81);write_data('3');break;
case
0xb7:write_com(0x80);write_data('1');write_com(0x81);write_data('4');break;
case
0x77:write_com(0x80);write_data('1');write_com(0x81);write_data('5');break;
}break;
}
}
}。

相关文档
最新文档