51单片机用4个按键,每个按键被按下都会使数码管显示一个数值

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-03
51单片机c语言程序 4个独立按键,分别控制4个数码管,每个独立按键按下

一看问题就知道你什么都不懂,4位的数码管能显示HELLO这5个字母?!

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;

5. [问答题] [技能题画10配线图写出程序]按下按钮S1,数码管显示1;按下按钮S2,数码管显示2;按下按钮S3,数码管显示3;按下按钮S4,数码管显示4;能互相直接切换。按下停止按钮后,数码管熄灭。。

图1 独立键盘原理图
程序实现功能:数码管前两位显示十进制数,00~59,开始为00。按下S1,数值+1,按下S2,数值-1,按下S3,清零,按下S4一次,自动+1,再按一次停止。
下面附上程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit du=P2^6;
sbit we=P2^7;
uchar counter,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };

uchar code list[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码管的段选

delay_ms(uint ms)
{
uint i;
uint j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}

void display(uchar i)
{
uchar shi,ge;
shi = i / 10; //取十位
ge = i % 10; //求余,取各位

P0 = 0xff;
we = 1;
P0 = list[0]; //点亮第一位数码管
we = 0;

du = 1;
P0 = table[shi];
du = 0;
delay_ms(1);

P0 = 0xff;
we = 1;
P0 = list[1];//点亮第二位数码管
we = 0;

du = 1;
P0 = table[ge];
du = 0;
delay_ms(1);
}
void init()
{
TMOD=0x10; //定时器1,工作模式1,16位模式定时器
TH1=(65535-45827)/256;
TL1=(65535-45827)%256; //定时50ms
//TR1=1; //启动定时器
}

void key()
{
if(k1==0)
{
delay_ms(10);
if(k1==0)
{
num++;
if(num==60)
num=0;
while(!k1); //等待按键释放
}
}
if(k2==0)
{
delay_ms(10);
if(k2==0)
{
if(num==0)
num=60;
num--;
while(!k2); //等待按键释放
}
}
if(k3==0)
{
delay_ms(10);
if(k3==0)
{
num=0;
while(!k3); //等待按键释放
}
}
if(k4==0)
{
delay_ms(10);
if(k4==0)
{
TMOD=0x10;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;
TR1=1;
while(1)
{ if(TF1==1)
{
TF1=0;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256; //定时50ms
counter++;
}
if(counter==20)
{
counter=0;
num++;
}
if(num==60)
{
num=0;
}
display(num);
}
while(!k4); //等待按键释放
{
TR1=~TR1;
}
}
}
}

void main()
{
init();
while(1)
{
key();
display(num);
}
}

  • 51单片机 c语言 如何用4个按键控制4个流水灯
    答:不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water(){ num=1;for(a=0;a<8;a++){ P1.1=num<<1;delay(1000); //延时;keyboard();//执行时又不停...
  • 51单片机按键控制直流电机正反转和快慢
    答:1. 按键与单片机的连接:首先,需要将按键连接到51单片机的I/O端口。这些按键可以包括控制电机正转、反转和速度调整的按钮。每个按键对应单片机的一个或多个I/O位,用于检测按键是否被按下。2. 电机控制逻辑编写:当单片机检测到特定按键被按下时,会执行相应的控制逻辑。例如,一个按键可能控制电机正转...
  • c语言单片机密码锁控制程序,用4个按键输入状态分别代表4位二进制数...
    答:用51单片机,假设p1·0至p1·3接4个开关,P2·0接开锁按键S1 While(s1!=0);//等待按开锁按钮 delayms(10);//延时 While(s1==0);//等待按键抬起 mima=0x0F&P1;//读取P1低4位 if(mima==12)lock=1;//如果与设定密码相等开锁 else Fmq=1;//否则,报警 ...
  • 单片机编程 四个按键 K1=p1.1 K2=p1.2 k3=p1.3 k4=p1.4 p5 p6输出(k1...
    答:include "reg51.h" // 试试 sbit k1 = P1^0;//按键1 sbit k2 = P1^1;//按键2 sbit k3 = P1^2;//按键3 sbit k4 = P1^3;//按键4 sbit p5 = P1^5; //输出1 sbit p6 = P1^6; //输出2 bit t1, t2;void main(void){ while(1){ if(k1==0 && t1==0) {t1...
  • 4个独立按键的的单片机,独立按键s2按下后蜂鸣器响的程序
    答:include<reg51.h> sbit s0=P1^0;sbit s1=P1^1;sbit s2=P1^2;sbit s3=P1^3;sbit fmq=P1^7;main(){ while(1)fmq=s2;}
  • 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//一个周期...
  • 用C语言实现51单片机按键的功能!接有四位八段数码管共四个按键,用于为...
    答:给你一个程序吧,如果显示不正常,就把显示的段码或者位码做相应的修改即可,有什么不清楚的也可以追问 include<reg52.h> typedefunsigned char u8;typedef unsigned int u16;u8 DispBuf[4];//显示 sbitRL = P1^0;//左移键 sbitRR = P1^1;//右移键 sbitADD = P1^2;//加1键 sbitSUB =...
  • ...一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一...
    答:include<reg51.h> define uchar unsigned char;uchar LED1,LED2;uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar num=0;sec,key;void delay(unsigned int a){ unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);} void display(){ LED1...
  • ...点亮响应对应的外部中断 这个怎么搞啊 51单片机
    答:51单片机只有2个外中断是P3.2 和 P3.3 可以用计数器再实现2个外中断(计数器0, P3.4和计数器1, P3.5)4个按键分别接到P3.2--P3.5 4个LED随便接其它IO口
  • 51单片机,怎么用汇编语言编程一个程序。实现4个按键控制4种报警声音(1...
    答:没有四种声音的频率库,其他的给你做个示范吧:ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SP,#5FH MOV TMOD,#11H SETB EA SETB ET0 SETB ET1 LOOP:LCALL KEYSCAN MOV A,R2 JNZ LP1 MOV DPTR,#TAB110 SJMP LPRUN LP1:DEC A JNZ LP2 MOV DPTR,#TAB119 SJMP LPRUN LP2:DEC A JNZ ...