51单片机怎样用键盘控制数码管显示
编写键盘驱动程序,按下键“1”再按键“+”然后按键“2”,最后按键“=”在数码管上显示结果。求助啊!!!!哪个大神会呢很急很急...
编写键盘驱动程序,按下键“1”再按键“+”然后按键“2”,最后按键“=”在数码管上显示结果。
求助啊 !!!!哪个大神会呢 很急很急 展开
求助啊 !!!!哪个大神会呢 很急很急 展开
4个回答
北京合创芯彩科技
2024-08-22 广告
2024-08-22 广告
/*-----------------------------------------------名称:单个共阳数码管动态显示变化数字内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变---------------...
点击进入详情页
本回答由北京合创芯彩科技提供
展开全部
即使写一个程序也只是给你做参考
首先定义接口,比如:
#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
首先定义接口,比如:
#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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你下载金沙滩的教学视频,电驴里面搜一个就知道了,下载后认真学习,你的这个程序需要基础知识太多不是几句说清的,
一,扫描键盘 捕捉按键值,
二,三八译码转到数码管档
三,现实数值
这些知识联合在一起,还要看每个板子的电路图,每个板子都不同!你贴出的并不完全,劝你下载视频学习一下自己学出来!相信你绝对可以的!
一,扫描键盘 捕捉按键值,
二,三八译码转到数码管档
三,现实数值
这些知识联合在一起,还要看每个板子的电路图,每个板子都不同!你贴出的并不完全,劝你下载视频学习一下自己学出来!相信你绝对可以的!
追问
你知道怎么代码吗 ?这个要求是在四个数码管上显示
追答
要看板子的电路图!举个例子 东流,和金沙滩的 不看结构就写出来的未必能亮!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个如果你不懂 建议你学习一下基础 这东西不难
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询