OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9590|回复: 11

利用键盘在12864上显示数字

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-8
在线时间
0 小时
发表于 2014-7-18 16:05:52 | 显示全部楼层 |阅读模式
5金钱
利用矩阵键盘输入数字然后再在12864上显示出来,按一个数字就在前一个数字的后面显示一个~

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-7-18 22:19:04 | 显示全部楼层
可以。。。
您检测键盘。。。输入数字然后在LCD显示即可。。
请问您的问题是?
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

55

主题

1231

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2624
金钱
2624
注册时间
2014-2-13
在线时间
514 小时
发表于 2014-7-19 09:35:22 | 显示全部楼层
多看人家例程就知道了
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-8
在线时间
0 小时
 楼主| 发表于 2014-7-19 20:30:09 | 显示全部楼层
回复【3楼】黑夜之狼:
---------------------------------
就是找不着啊~求分享~
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-8
在线时间
0 小时
 楼主| 发表于 2014-7-19 20:30:57 | 显示全部楼层
回复【2楼】Admin:
---------------------------------
一直在刷0这个数字。。刷了满满的屏
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-19 23:21:36 | 显示全部楼层
回复【5楼】cnntiming:
---------------------------------
说明你送给LCD的数据不对.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-8
在线时间
0 小时
 楼主| 发表于 2014-7-20 20:51:51 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
可是我刚刚运行完还没有按下按键啊。。所以要改的是扫描按键的那部分么?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-20 23:24:10 | 显示全部楼层
回复【7楼】cnntiming:
---------------------------------
你分析下程序流程比较靠谱.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-8
在线时间
0 小时
 楼主| 发表于 2014-7-22 21:22:45 | 显示全部楼层
总的来说就是先初始化,然后设置初始地址,然后就是在循环按键和显示
下面是程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void init12864();
sbit E=P2^0;
sbit RS=P2^2;
sbit RW=P2^1;
uchar key,k;
uchar code table[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'} ;
    
void delay(uint m)//延时

     uint i,j;
     for(i=m;i>0;i--)
        for(j=110;j>0;j--);
}
key_scan()
{
     uchar t;
 3=0x7f;  //第一行
 t=P3;
 t=t&0x0f;
 delay(10);
 if(t!=0x0f)
 {
    t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
   delay(10);
   t=P3;
   switch(t)
   {
     case 0x77:key=0;break;
     case 0x7b:key=1;break;
     case 0x7d:key=2;break;
     case 0x7e:key=3;break;
}
 while(t!=0x0f)
 {
     t=P3;
     t=t&0x0f;
   } 
}
 }
 3=0xbf;  //第二行
 t=P3;
 t=t&0x0f;
 delay(10);
 if(t!=0x0f)
 {
    t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
   delay(10);
   t=P3;
   switch(t)
   {
     case 0xb7:key=4;break;
     case 0xbb:key=5;break;
     case 0xbd:key=6;break;
     case 0xbe:key=7;break;
}
 while(t!=0x0f)
 {
     t=P3;
     t=t&0x0f;
   } 
}
 }
 3=0xdf; //第三行
 t=P3;
 t=t&0x0f;
 delay(10);
 if(t!=0x0f)
 {
    t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
   delay(10);
   t=P3;
   switch(t)
   {
     case 0xd7:key=8;break;
     case 0xdb:key=9;break;
     case 0xdd:key=10;break;
     case 0xde:key=11;break;
}
 while(t!=0x0f)
 {
     t=P3;
     t=t&0x0f;
   } 
}
 }
 3=0xef;  //第四行
 t=P3;
 t=t&0x0f;
 delay(10);
 if(t!=0x0f)
 {
    t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
   delay(10);
   t=P3;
   switch(t)
   {
     case 0xe7:key=12;break;
     case 0xeb:key=13;break;
     case 0xed:key=14;break;
     case 0xee:key=15;break;
}
 while(t!=0x0f)
 {
     t=P3;
     t=t&0x0f;
   } 
}
 }
return key;
}


void write_date(uchar date)  //写显示数据
{
     RS=1;
 RW=0;
 E=0;
 delay(10);
 E=1;
 1=date;
 delay(10);
 E=0;    

void write_com(uchar com)  //写指令
{
 RS=0;
 RW=0;
 E=0;
 delay(10);
 E=1;
 1=com;
 delay(10);
 E=0;
}
void init12864()  //初始化
{
     delay(10);
 write_com(0x30);//基本指令 ,8位数据
 delay(10);
 write_com(0x0c);//开显示
 delay(10);
 write_com(0x01);//清除显示
 delay(10);
}
void set_ADD(uchar x,uchar y)//设置文字地址
{
     uchar add;
 if(x==0) x=0x80;
   else if(x==1) x=0x90;
     else if(x==2) x=0x88;
   else x=0x98;
 add=x+y;
     write_com(add);

void display()
{
  k=key_scan();
  write_date(table[k]);
  } 
void main()
{
 delay(10);
 init12864(); //初始化
 delay(10);
 set_ADD(1,0);//设置地址  
 while(1) 
  {
  delay(20);
display();  
    }

}
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-6-17
在线时间
1 小时
发表于 2016-6-17 09:23:31 | 显示全部楼层
/tx    学习了。。。。。。。。。。。。。。。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-6-17
在线时间
1 小时
发表于 2016-6-17 09:24:32 | 显示全部楼层
代码中的偷笑是啥啊
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2016-6-17 15:20:24 | 显示全部楼层
30年众生牛马,60年诸佛龙象!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 15:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表