51单片机怎样用键盘控制数码管显示

编写键盘驱动程序,按下键“1”再按键“+”然后按键“2”,最后按键“=”在数码管上显示结果。
求助啊 !!!!哪个大神会呢 很急很急

51单片机怎样用键盘控制数码管显示的方法。

如下参考:

1.首先,编写代码并点亮数码管。

2.在编写源代码之后,确保原始代码是正确的。

3.确认代码正确后,进入下一步,就是在这一行代码(箭头所指)中,删除这四个单词。

4.然后如图所示,四个单词已被删除,只要修改相应的代码编号即可。

5.表示数字0的代码在这里进行了更改,如图所示。

6、最后写代码,将生成的十六进制文件写进单片机应答,数码管显示的数字变为0。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-12
即使写一个程序也只是给你做参考

首先定义接口,比如:
#include“reg51.h”
sbit S1 =P1^0;
sbit S2 =P1^1;
sbit S3 =P1^2;
sbit S4 =P1^3; //按键对应的单片机IO

sbit SMG_EN P1^4; //数码管选通
sbit SMG_SET() SMG_EN =0 //数码管公共使能
sbit SMG_CLR() SMG_EN =1 //数码管公共失能
define GPIO_PORT P2 //数码管8位数据口

//以上是按键及数码管对应的单片机IO,下面来写驱动程序,首先需要定义一个字符码
unsigned char ascll[]={xx0,xx1,xx2,xx3,xx4,xx5,xx6,xx7,xx8,xx9};//此数组的值需要根据数码管与单片机数据口的实际对应关系来写,数组0-9偏移量分别对应数码管显示0-9的数值码希望你能明白这一点。

/* 延时函数 */
void Delay(unsigned long w)
{
while(w--);
}

//下面先来写一个驱动函数
void DisPlay(unsigned char dat)
{
SMG_SET();//数码管选通
GPIO_PORT =dat;//将数据Dat送给数码管显示
}

//按键扫描函数,按键对应的是P1最低4位
unsigned char key()
{
unsigned char temp;

P1 =0xff;
if((P1&0x0f)!=0x0f) //如果P1口低4为不为f则表明有按键按下,下面判断是哪个按键
{
Delay(1000); //延时约20ms用来消抖,必须的

if((P1&0x0f)!=0x0f)//消抖后在判断一次如果低4位不为f就表示确实有按键按下
{
temp =GPIO_RORT&0x0f; //将IO上的按键值读给变量temp

switch(temp) //判断是哪个键被按下
{
case 0x0e: //表示是S1被按下1110
DisPlay(1);//显示1
break;

case 0x0d: //表示是S2被按下1101
DisPlay(2);//显示2
break;

case 0x0b: //表示是S3被按下1011
DisPlay(3);//显示3
break;

case 0x07: //表示是S4被按下0111
DisPlay(4);//显示4
break;

}
while((P1&0x0f)!=0x0f); //如果按键还一直被按着,则等待用户松开按键
}
Delay(1000);//延时20ms消抖
}
}

void main()
{
while(1)
{
key();//调用按键函数
}
}

一口气从上面写到下面,给你参考,希望对你有帮助,有疑问联系我499913606本回答被提问者采纳
第2个回答  推荐于2017-12-16
你下载金沙滩的教学视频,电驴里面搜一个就知道了,下载后认真学习,你的这个程序需要基础知识太多不是几句说清的,
一,扫描键盘 捕捉按键值,
二,三八译码转到数码管档
三,现实数值
这些知识联合在一起,还要看每个板子的电路图,每个板子都不同!你贴出的并不完全,劝你下载视频学习一下自己学出来!相信你绝对可以的!追问

你知道怎么代码吗 ?这个要求是在四个数码管上显示

追答

要看板子的电路图!举个例子 东流,和金沙滩的 不看结构就写出来的未必能亮!

本回答被网友采纳
第3个回答  2012-11-25
这个如果你不懂 建议你学习一下基础 这东西不难

51单片机怎样用键盘控制数码管显示
51单片机怎样用键盘控制数码管显示的方法。如下参考:1.首先,编写代码并点亮数码管。2.在编写源代码之后,确保原始代码是正确的。3.确认代码正确后,进入下一步,就是在这一行代码(箭头所指)中,删除这四个单词。4.然后如图所示,四个单词已被删除,只要修改相应的代码编号即可。5.表示数字0的代码在...

51单片机怎么用按键控制一个数码管,按一下显示一
\/*---名称:单个共阳数码管动态显示变化数字内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变---*\/#include\/\/包

汇编语言51单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制...
1、按你显示程序的逻辑,对TAB修改如下:TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H 即数据的首尾为0(这是个标记而已),中间才是七段码 0--F 的显示数据;2、对CK1、CK2键盘按下及松开程序做了修改;3、显示程序也进行了修改,唯独延...

51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现_百度...
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据 行列的状态查表就可以知道...

51单片机中如何按下按键时数码管正常显示而不闪烁,并且实现长按连续...
if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)\/\/如果有按键按下 { while(!KEY1)\/\/如果按键1按下 { xianshi(neirong);\/\/执行显示 delay_ms(1);\/\/延时 i++;\/\/每次i自加1 if(i>=1000){ k=11;\/\/按键1长按 } else { k=1;\/\/按键1短按 } } i=0;while(!KEY2)\/\/如果按键...

51单片机怎样设按键切换数码管显示时间和日期?
你要设置一个标志变量,如flag,在进入按键程序后,flag++;然后加个控制判断语句 if(flag>3)flag=0;这样,在显示模块中再加入开关语句;switch(flag){ case 0:...显示时间..case 1:...显示日期。。.case 2:...显示温度。。。}

求51单片机的C程序,就是键盘控制这个一位七段数码管,按键按1按下数码管...
51单片机的C程序,4*4键盘控制这个八位七段数码管。可以参考一下 include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D...

51单片机C语言程序4个独立按键实现对数码管数字显示的加减清零等_百度...
include <reg52.h>\/\/P0是数码管。P1是LED.P2是按键sbit KEY_OUT_1 = P2^3;sbit KEY_OUT_2 = P2^2; sbit KEY_OUT_3 = P2^1;sbit KEY_OUT_4 = P2^0;#define uchar unsigned char#define ulint unsigned long#define Frequency 10\/\/定时器中断时间 = f*T#define Time 1\/\/一个周期...

急求4*4矩阵键盘控制数码管显示! 51单片机
void time0() interrupt 1 \/\/T1中断用来计数器溢出 数码管显示 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;aa++;if(aa==100){ aa=0;TR0=0;for(bb=0;bb<8;bb++){ number[bb]=16;xianshi[bb]=16;} } } void delay(uint x){ uint a,b;for(a=x;a>0;a--)for(b=...

急求51单片机数码管显示程序
希望以下能够给你帮助:\/* 实验目的:1.掌握键盘扫描的原理以及十\/十六进制的转换 2.了解单片机输入和输出的过程,以及如何对数据进行采集的 实验内容:键盘上对应有16个按键,从0到F,按下相应的键会在数码管上显示相应的数字,其中K0到K15是采用4*4的方式连接的 \/ ;; 0 1 2 3 --...

相似回答