导航:首页 > 操作系统 > 单片机按键数码管显示

单片机按键数码管显示

发布时间:2022-10-05 17:39:01

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

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

如下参考:

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

⑵ 单片机 按键控制8位数码管显示问题

关于数码管的显示,是显示完一个位的是数字后,在显示下一个位时要先把上一个位显示彻底关闭掉,通常可以是把全部数码管位全部显示为空的状态,谈后在开下一个位的显示(有延时),这样在开下一个位的锁存时上一个位的数据就不会跑到该位显示,不然会在下一位显示时会与上一个位的数字出现重影现象。。。
还有对于数码管的显示,最好是一次性显示完全部数码管,还没有得位就显示0ff(要记得初始化你的数组)。我个人不建议你这种显示按位数变化方式。。。
for(i=0;i<j;i=i+1)
//每次都显示完8个数码管比较好。。。
{
/*
在此增加把所有数码管显示为0FF状态,全部位都打开显示
*/
display=weima_table[i];
//数码管需要显示的位
weima_latch=1;
//锁存器(位码)打开
weima_latch=0;
//锁存器(位码)关闭
display=cunchudisplay[i];
//数码管需要显示的段
anma_latch=1;
//锁存器(段码)打开
anma_latch=0;
//锁存器(段码)关闭
Delay(100);
}
判断归零一个变量,最好紧跟在修改该值的后面,不用放在主循环里每次循环都要判断,虽然你那没多大问题但可读性不够好。。。
j=j+1;
if(j==8)
{j=0;}

⑶ 单片机中数码管无论数码管显示多少,按键按下时数码管就显示零程序怎么写呀

1、写个按键扫描程序:监视某个IO口的电平(如按键按下IO口低电平),延时消抖,确认按键按下。
2、写个数码管显示子程序
3、在主程序中调用按键扫描了程序,确认按键按下后调用数码管显示程序把“0”送显即可

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

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

如下参考:

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

⑸ 51单片机6位数码管显示时间

C51单片机六位数码管时钟
用数码管dot分隔时分秒
用三个按键设置时间:
SET键:小时设定->分钟设定->结束设定,小时设定状态时表示小时的两位数码管闪烁,分钟设定时表示分钟的两位数码管闪烁
CHANGE键:在小时设定状态和分钟设定状态改变数值
SET S键:秒置零

C语言代码:
//main.c

#include <REGX52.H>
typedef unsigned int UINT ;
typedef unsigned char UCHAR ;
#define KEY P2
#define KEYMASK 0x07
sbit LE1 = P2^6; //定义位控口
sbit LE2 = P2^7; //定义段控口
UCHAR KeyPressDown = 0x00;
UCHAR KeyRelease = 0x00;
UCHAR LastKey = 0x00;
UCHAR MODE ;
extern UCHAR HH;
extern UCHAR MM;
extern UCHAR SS;
extern bit T_CYCLE ;
extern void T0_Init(void); //初始化定时器,函数定义在Timer.c
UCHAR code NUM[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(UINT t) //延时t时钟周期
{
while (t--) ;
}

void H_Increase(void) //小时增1
{
if(HH<23) HH++;
else
{
HH = 0;
}
}

void M_Increase(void) //分钟增1
{
if(MM<59) MM++;
else
{
MM = 0;
H_Increase();
}
}

void S_Increase(void) //秒增1
{
if(SS<59) SS++;
else
{
SS = 0;
M_Increase();
}
}

void display(UCHAR SEG,UCHAR Digi) //显示一位数码管,SEG = 0-9数字,Digi = 第0-6位
{
LE2 = 1;
P0 = (0x01<<Digi) ;
LE2 = 0;
P0 = 0x00;
LE1 = 1;
P0 = NUM[SEG];
if (Digi==1||Digi==3) P0 &= 0x7f ; //显示分隔符
delay(50);
P0 = 0xff;
LE1 = 0;
}

void main(void)
{
P0 = 0xff;
LE1 = 0;
LE2 = 0;
T0_Init();
while(1)
{
if(MODE != 1 || T_CYCLE)
{
display(HH/10,0); //显示小时十位数
display(HH%10,1); //显示小时个位数
}
if(MODE != 2 || T_CYCLE)
{
display(MM/10,2); //显示分钟十位数
display(MM%10,3); //显示分钟个位数
}
display(SS/10,4); //显示秒十位数
display(SS%10,5); //显示秒个位数
}
}

void key_Process(void) //按键处理程序
{
UCHAR CurrKey;
KEY |= KEYMASK; //将按键对应的IO设置为输入状态
CurrKey = (~KEY) & KEYMASK;

KeyPressDown = (~LastKey) & CurrKey;
KeyRelease = LastKey & (~CurrKey);

LastKey = CurrKey;
switch(KeyRelease)
{
case 1:
if(MODE == 2) MODE = 0;
else MODE ++;
break;
case 2:
if(MODE == 1) H_Increase() ;
if(MODE == 2) M_Increase() ;
break;
case 4:
SS = 0;
break;
default: break;
}
}

//Timer.c

#include <reg52.h>
typedef unsigned int UINT ;
typedef unsigned char UCHAR ;
UCHAR HH = 14; //小时初始值
UCHAR MM = 2; //分钟初始值
UCHAR SS = 55; //秒初始值
UINT u_10ms = 0; //10ms计数
bit T_CYCLE = 0;
extern void key_Process(void);
extern void S_Increase(void);

void T0_Init(void)
{
TMOD &= 0xf0;
TMOD |= 0x01;
//定时器赋初始值,定时时间为10ms。
TH0 = 0xd8;
TL0 = 0xf0;
TR0 = 1;
IE = 0x82;

}

void T0_INTSrv(void) interrupt 1
{
//定时器重新开始计时。
TH0 = 0xd8;
TL0 = 0xf0;
u_10ms ++;
if (u_10ms%20==0) // 200 ms
{
T_CYCLE = ! T_CYCLE; //闪烁循环
}
if (u_10ms>99) // 1000 ms = 1 second
{
u_10ms = 0;
S_Increase();
}
key_Process(); //SET按键处理
}

Proreus仿真电路:

⑹ 51单片机怎么让数码管动态显示1234动态显示后通过按键变成静态显示

数码管动态显示就是按顺序分配给每一个数码管显示一定时间(如10ms等),如此循环;
对于时间间隔的设定,常采用定时器中断方式来得到,可以首先让定时器1ms中断,然后在中断函数里对全局变量m计数,即10次中断就是10ms,同理,计数800次就是8秒了;

要想让显示变成静态显示,那么就只有一位数码管在显示了;
这个可以在想显示的位中,停止定时器计数,或者在 m 未达到设定值前清0 即可;
另外,不要再采用delay()这样的代码延时函数;

⑺ 51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示

1、首先,要把代码写好,点亮数码管。

⑻ 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环

假设你的是共阳极数码管,P0接数码。按键接P2^0;

#include<reg52.h>
typedef unsinged int uint;
sbit key=P2^0;
unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void denay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--)

}

void main()
{
uchar a;

while(1)
{
P0=tab[a];

if (key1==0)
{delay(10);
if(key==0)
{
while(!key1);

a++;
if(a==10) a=0;

}

}

}

⑼ 51单片机按键时,数码管会闪烁一下.原因是什么

原因很简单,这是代码和数码管驱动的问题
按键会影响数码管显示,这是单片机直接驱动数码管会出现的问题,而数码管则是工作在动态扫描方式的,若是采用带有锁存器件的数码管驱动,则不会出现此类现象,因为单片机是周期性的扫描工作方式,单片机直接驱动数码管的电路,当单片机扫描到按键的时候,数码管部分就停止了(一般的代码都这样,除非数码管是工作在静态扫描方式)
直接驱动数码管,按键的代码一般都会写一些延时,用来软件消除按键的抖动,若延时的时间太长,就会影响数码管的显示效果,另外有些还会增加等待按键松开的语句,这种语句一般都是一个死循环,除非按键被松开
解决办法是,减少按键消抖动延时的时间,在等待按键松开的死循环语句中调用数码管显示函数,这样基本上就可以解决此类问题

⑽ 单片机检测和处理按键时怎样不干扰数码管的显示

程序乱了一点,重新调整一下结构吧,你可以试一下这样:你的4位数码管还是用动态扫描,4个以内的按键也还是用扫描,不过你要把几个按键的扫描时间安排在4个数码管的显示时间内,即是显示第一位数码管后就扫描第一个按键状态,判断按键的不同状态(开或合)给予不同的标志(这个标志用来后面程序统一处理按键的动作的);当显示第二位数码管后就扫描第二个按键的状态,判断按键的不同状态(开或合)给予不同的标志...以此类推,当4个数码管都显示完后就放一段按键的处理程序(根据不同的标志作出不同的处理),到此再返回开始处循环.

阅读全文

与单片机按键数码管显示相关的资料

热点内容
加密锁厂家联系方式 浏览:469
怎么执行脚本语言不用编译 浏览:432
目前使用方舟编译的程序 浏览:311
无牙仔电影有几部 浏览:57
外国电影,男人在外星流浪, 浏览:722
用plc编程时基本思路 浏览:474
my是什么app的缩写 浏览:102
性迷宫类似电影 浏览:446
都市警察异能小说主角母女全收 浏览:724
阿甘的英文名 浏览:263
美女情趣体验师 一条震动内裤引发的韩国电影 浏览:673
一女多男主现代小说有哪些 浏览:42
李采谭所有电影 浏览:478
杀破狼2结局都死了吗 浏览:437
主角叫陆宇的小说排行榜 浏览:944
程序员害怕去酒吧 浏览:121
有部很肉的写大学的小说 浏览:421
鬼习班 浏览:699
十四路末班车鬼片电影完整版免费 浏览:349
日本电影 网站 浏览:357