单片机按键控制数码管显示

作者&投稿:寸顾 (若有异议请与网页底部的电邮联系)
51单片机怎样用键盘控制数码管显示~

51单片机怎样用键盘控制数码管显示的方法。
如下参考:
1.首先,编写代码并点亮数码管。

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

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

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

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

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

#include
#define uint unsigned int
#define uchar unsigned char //宏定义
sbit key1=P0^0; //定义键盘IO口
sbit key2=P0^1; //
sbit beep=P2^3;
sbit key3=P0^2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; //共阳数码管编码号
uchar num;
void keyscan();//键扫描函数
void display();
void delayms(uint);
void main() //主函数
{
while(1) //大循环
{
///display(); //显示函数
keyscan(); //键扫描函数
display(); //显示函数
}
}
void display()//显示函数,使函数调回主函数
{
P1=table[num];//显示数码管编码数
delayms(5);
}
void keyscan() //键扫描函数
{
if(key1==0) //判断键一是否按下
{
if(key1==0)
{
delayms(10);
while(!key1);//未按下,键开路
num++;
beep=~beep;
delayms(50);
beep=~beep;
if(num==10)
{
num=0;
}
while(!key1);
}
}
if(key2==0)
{
if(key2==0)
{
delayms(10);
beep=~beep;
delayms(50);
beep=~beep;
while(!key2);
num--;
if(num==0)
{num=10;}
while(!key2);
}
}
if(key3==0)
{
if(key3==0)
{
delayms(50);
beep=~beep;
num=0;
while(!key3);
}
}


}
void delayms(uint xms) //延时函数
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

SBUF=dispcode[num0];//第1位
while(!TI);
TI=0;
led0=0;
delay(2);
led0=1;

SBUF=dispcode[num1];//第2位
while(!TI);
TI=0;
led1=0;
delay(2);
led1=1;

SBUF=dispcode[num2];//第3位
while(!TI);
TI=0;
led2=0;
delay(2);
led2=1;
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。

你有原理图没?

设置三个标志位,全局变量,需要在倒计时中断里改变状态的。

程序流程是:

主程序流程:
上电初始化(设置LED状态,设置定时器相关寄存器参数,设置三个标志位状态)---> 死循环(判断标志位是否容许按键有效,然后判断是否有按键按下,转入响应的子程序处理段)

定时器中断任务:
判断是否到15秒,到了就置位标志位。

#include<reg51.h>
sbit k1=P1^0;
sbit k2=P1^1;
unsigned char i,j=1;
void tate1();
void tate2();
void delay(unsigned char x)
{
while(x--)
{
for(i=0;i<100;i++);
}
}
void main()
{
unsigned int a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
while(1) {
for(i=0;i<50;i++) //for(i=0;i<200;i++)
{
tate1();
delay(5);
tate2();
P0=a[j/10];
P2=0xe3;
delay(5);
P0=a[j%10];
P2=0xe7;
}
for(i=0;i<200;i++) //P0=0x00;delay(100);
P0=0x00;
}
}
void tate1()
{
if(k1==0)
{
delay(80);
if(k1==0)
while(!k1);
if(j==30)
j=0;
j=j+1;}
}
void tate2()
{
if(k2==0)
{
delay(80);
if(k2==0)
while(!k2);
if(j==1)
j=31;
j=j-1; }
}

晶振频率是多少?


四位共阳极数码管如何接译码器74ls138
接上也没有用,出不来你想要的效果,38译码器8个输出端之间只有一个是低电平其他都是高电平,不能控制数码管,想要控制数码管的话,建议你用74HC164是个串口转并口的片子,两个口控制8个口,正好可以满足你的要求,至于解法根据程序的设定而变!!~~ 本回答由提问者推荐 举报| 答案纠错 | 评论(1) 5 3 w05717011...

四位一体数码管如果数码管里面的接线是真是这样,那根本没有办法显示...
四位一体数码管,要用数字电路的译码器驱动,像你第一个图的电路,确实只能当一位来用。但是用单片机就可四位都亮,而且显示四个不同的数。单片机采用动态扫描方式驱动,别说是四位一体,8位一体也照样驱动。当然了,你是用数字电路的思维来考虑这个问题的,还气愤地整出双片机,太有才啦!让你看...

...61单片机电子音乐闹钟时间在2位片选的4位数码管上显示的程序,并能帮...
主函数是c写的,但是系统函数和按键程序是用汇编写的,4*4键盘按键显示,四位八段共阴数码管,希望能帮到你 \/\/ 工程名称: led_Show_Key.scs;led_Show_Key.spj "在LED上显示按键"\/\/ 功能描述: 按键在LED数码管上显示 \/\/ 文件来源: 4*4键盘输入在LED数码管上的显示"\/\/ ...

用两片74HC573锁存器控制4位共阴数码管动态显示的汇编程序 要汇编语 ...
CONV: ;数码管显示数据转换子程序 CJNE R5,#02H,BEI MOV A,24H AJMP JING BEI:MOV A,23H JING:MOV B,#64H DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV DISPBUF+2,A MOV A,B MOV B,#0AH DIV AB MOVC A,@A+DPTR MOV DISPBUF+1,A MOV A,B MOVC A,@A+DPTR MOV DISPBUF,A...

运用51单片机实现2位8段数码管显示00-99,数码管的段选择数据由P0口控制...
根据使用情况来讲: 使用上来说很流畅,不过机器的发热量有些大,尤其是玩了半小时3D游戏或者是看了720P的视频的时候,可以明显感觉到热量,相机那块比较热。 因为平常经常拿手机看片,发现看了90分钟以上的时候,会发现视频和音频不同步的情况,估计是温度升高导致机能下降导致的。不过一般情况下都没问...

...用汇编语言设计计数器(要求从0~9999,在数码管上显示)!!!_百度知 ...
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、...求单片机课程设计 用汇编语言设计计数器(要求从0~9999,在数码管上显示)! 计数器,是对外来脉冲计数。 那么,下图电路,就应该可以满足条件了。 用按键,当做...

89c55wd单片机调节仪数码管驱动不亮
89c55wd单片机调节仪数码管驱动不亮,是由于片机硬件连接问题。根据查询相关资料信息显示,89c55wd单片机硬件的连接接触不良出现断路,会导致电流无法通过,出现调节仪数码管驱动不亮现象。解决方法是检查硬件连接,将断开位置重新焊接。

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
共阳数码管中断程序:include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uint num,a;uchar bai,shi,ge;void init();void delay(uint);void ...

单片机实训总结范文5篇
★ 单片 机实 训心得 体会 ★ ★ 实 训总 结报 告范 文 ★ ★ 实 训总 结与心 得体会 ★ ★ 实 习实训总 结报 告 ★ ▼ 单片机实训总结范文篇一: 通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本...

《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 第03...
实例62:用数码管慢速动态扫描显示数字"1234"实例63:用LED数码显示器伪静态显示数字1234 实例64:用数码管显示动态检测结果 实例65:数码秒表设计 实例66:数码时钟设计 实例67:用LED数码管显示计数器T0的计数值 实例68:静态显示数字“59”单片机c语言编程100个实例目录3 键盘控制*键盘控制* *键盘控制...

鄱阳县14719925451: 请问单片机中要怎么用按键控制数码管显示的模式..用C语言编程.. -
双亚消风: 可以用按键中断,也可以用按键查询. 用按键中断:如果按键按下就进入中断子程序里,然后在中断子程序里改变显示模式即可 按键查询:用while 语句查询某个按键是否按下,如果未按下则继续执行子程序,如果按键按下则跳入到事先写好的子程序,在子程序里改变显示模式希望能帮到你!

鄱阳县14719925451: 51单片机按键对数码管的控制 -
双亚消风: /*----------------------------------------------- 名称:单个共阳数码管动态显示变化数字 内容:通过循环检测P1口按键输入值,然后用数码管输出, 没有按键按下时原值不变 ------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不...

鄱阳县14719925451: 单片机 键盘控制数字的加减 在数码管上显示出数据 -
双亚消风: 是主函数出了问题,你的键盘扫描程序是有返回值的函数,返回的值是指函数的运算结果,不是对于keycounts这个变量的,所以你需要把主函数改成 while (1){uchar m;m=keyscan();bai=m/100;shi=m/10%10;ge=m%10;display(bai,shi,ge)...

鄱阳县14719925451: 51单片机控制数码管显示时钟,独立按键怎么弄 -
双亚消风: 独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好.比如: sbit key=P1^0; if(key==0) {delay(10);if(key==0){keyval=1;while(key==0);} }

鄱阳县14719925451: 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环 -
双亚消风: #include<reg51.h> sbit k1=P1^0; #define uint16 unsigned int #define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay() { uint16 i=1000;while(i--); } void main() { uchar n ; P2=0xfe; P1=0xff; ...

鄱阳县14719925451: 51单片机中如何按下按键时数码管正常显示而不闪烁,并且实现长按连续 -
双亚消风: 你好,我也遇到这样的问题,经过一周的研究,问之前的前辈得出结果,希望对你有帮助 char scan_k(char k) { int i=0;//定义一个变量用来累计长按的时间 if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)//如果有按键按下 { while(!KEY...

鄱阳县14719925451: 多个按键控制多个数码管的显示. -
双亚消风: 很简单 共阴 数码管共阴.连在P1口.P2^1作为按键.void main() { unsigned char a[2]=; char *p; p=a; //将a[0]的值传给p while(1) { if(P2^1==0) //键按下 { P1=p; //显示当前p指向的值 p++; //p指向后一位 if(*p=='/0') //如果指针P指向的值为'/0'则将P重新指向a的首地址 p=a; } } }

鄱阳县14719925451: 用单片机89C51实现数码管的显示,要求0 - F任意按下一个键,用4个数码管显示它的二进制值,并滚动显示 -
双亚消风: 这个很容易,我不给你程序,给你 个建议吧,设置是十六个键,设一个变量'i'每个键按下要存储'i'值,分别为0000,0001......1111.按下k1之后判断前面所存储的值是多少然后给显示出来 显示数码应该会的吧,用动态扫描数码管,四个就可以了,k2更好办,按k2之后执行将i值清零.这个是入门,入门之后你就会喜欢编程了

鄱阳县14719925451: 急求AT89C51单片机用按键控制输入串行数码管显示程序 -
双亚消风: SBUF=dispcode[num0];//第1位 while(!TI); TI=0; led0=0; delay(2); led0=1; SBUF=dispcode[num1];//第2位 while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[num2];//第3位 while(!TI); TI=0; led2=0; delay(2); led2=1;

鄱阳县14719925451: 51单片机中键盘控制数码管显示有谁会? -
双亚消风: 用51的话,由于51的I/O没有高阻态,用中断去扫描键盘的话你给的电路图是行不通的(个人意见仅供参考),想要节省CPU开销的话可以用定时器,定时扫描键盘.下面是仿真图和程序.#include#define uint unsigned int #define uchar ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网