51单片机按键控制数码管?

供稿:hz-xin.com     日期:2025-01-14
51单片机怎样用键盘控制数码管显示

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

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

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

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

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

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

定义开关引脚
sbit k1=P1^0;
sbit k2=P1^1;
依次类推,向下定义

void main()
{
while(1)

if(k1==0) P2=0xC0; //显示0的代码
if(k2==0) P2=***; //显示0的代码
依次类推}

希望对你有帮助。

#include <reg52.h>    //  可以参考一下

#define uchar unsigned char

#include <stdio.h> 

unsigned char* c;   

sbit  k0=P3^2;

sbit  k1=P3^3;  

sbit  k2=P3^4; 

sbit  k3=P3^5; 

sbit  k4=P3^7; 

sbit  led1=P1^7;

uchar  k;

bit  y0,y1,y2,y3,y4,y5;     

bit  t,s,ld;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c)  //发送字节到PC

  {

  TI=0;

  SBUF = c;

  while(!TI);

  TI=0;

  } 

void SendString(char *st)  //发送字符串到PC

  {

  while(*st)

    {

    SendOneChar(*st++);

    }

  } 

void main()

{

  SCON = 0x50;    //SCON: mode 1, 8-bit UART, enable rcvr

  TMOD = 0x20;    //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

  TH1 = 0xF4;     //TH1:  reload value for 2400@11.0592MHz

  TR1 = 1;        //启动定时器1

  ES = 1;         //允许串口中断位

  EA = 1;         //允许总中断位

  c=0;

  s=1;

  k=0;

  P1 =~table[k];

  while(1)

    {

    if(k0==0 && y0==0)

      {

      y0=1; 

      c = "as";

      SendString(c);              //发送字符串

      }

    if(k0==1 ) { y0=0; }

    if(k1==0 && y1==0) 

      {

      y1=1; 

      c = "bs";

      SendString(c);              //发送字符串

      }

    if(k1==1 ) { y1=0; }

    if(k2==0 && y2==0)

      {

      y2=1; 

      c = "ds";

      SendString(c);              //发送字符串

      }

    if(k2==1 ) { y2=0; }

    if(k3==0 && y3==0) 

      {

      y3=1; 

      c = "es";

      SendString(c);              //发送字符串

      }

    if(k3==1 ) { y3=0; }

    if(k4==0 && y4==0)

      {

      y4=1; 

      c = "fs";

      SendString(c);              //发送字符串

      }

    if(k4==1 ) { y4=0; }

  //  for(i = 0; i < 4000; i++);  //延迟一小段时间

  }

void chuankou(void) interrupt 4

  {

  if(RI==1)

    {

    RI = 0;

    if(t==1)

      {

      if(SBUF=='z') { k++;ld=~ld; }

      s=1; t=0;

      if(k==10) { k=0;}

      P1 =~table[k];

      led1=ld;

      }

    if(SBUF=='a' && s==1) { t=1;s=0;}

    }

 }

/////////////////////////////////////////

#include <reg51.h> // 接收  试试

#define uchar unsigned char

unsigned char* c; 

sbit   led1=P3^2;     //  接收 az  , P.2 输出低电平, P3.3  输出高电平。

sbit   led2=P3^3;     //  接收 aa  , P.2 输出高电平, P3.3   输出低电平。

sbit   k0=P3^5;

bit  y0,t,s;

uchar  k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c)  //发送字节到PC

  {

  TI=0;

  SBUF = c;

  while(!TI);

  TI=0;

  } 

void SendString(char *st)  //发送字符串到PC

  {

  while(*st)

    {

    SendOneChar(*st++);

    }

  } 

void main (void)

  {

  SCON = 0x50;     // REN=1允许串行接受状态,串口工作模式1  

  TMOD = 0x21;     // 定时器工作方式2  

  PCON = 0x80;     // 数据位8、停止位1。效验位无 (11.0592M)  

  TH1 = 0xF4;      // TH1 = 0xFD; 波特率 2400  

  TH0=(65536-54253)/256;  // 50 mS

  TL0=(65536-54253)%256;

  TR1  = 1;  

  ES   = 1;        // 开串口中断

  EA   = 1;        // 开总中断

  led1=1;led2=0;

//  ET0=1;

//  TR0=1;

  s=1;

  k=0;

  P1 =~table[k];

  while(1)

    { 

    if(k0==0 && y0==0)

      {

      y0=1; 

      c = "az";

      SendString(c);              //发送字符串

      }

    if(k0==1 ) { y0=0; }

    }

  }

void chuankou(void) interrupt 4

  {

  if(RI==1)

    {

    RI = 0;

    if(t==1)

    {

   if(SBUF=='s') {led1=~led1;led2=~led2; k++; }

   //if(SBUF=='s') {led1=1;led2=0; k--; }

   s=1; t=0;

   if(k==10) { k=0;}

   if(k==255) { k=9; }

   P1 =~table[k];

   }

//    1号  a    2号  b   ---

 if(SBUF=='a' && s==1) { t=1;s=0;}

    }

 }

void T0_time()interrupt 1

 {

    TH0=(65536-54253)/256;  // 50 mS

    TL0=(65536-54253)%256;

    k++;

    if(k==10)  // 这里修改时间

    {

    k=0;

    led1=1;

    led2=1;

    }

  }



编写一个小程序,即可解决。
编程语言,怎么不指定?
用 C 还是用汇编语言?

K2 K3是自锁的吗?互锁吗?

51单片机控制数码管显示时钟,独立按键怎么弄
此外,为了确保程序的健壮性,建议在按键处理的每个环节都加入适当的错误检查和异常处理。例如,在延时函数后检查按键状态是否依然为0,防止因外部干扰导致误判。在51单片机控制数码管显示时钟的项目中,按键处理是不可或缺的一部分。通过上述方法,可以有效地实现按键的检测和响应,为时钟功能提供可靠的操作...

stm32用一个按键控制两位数码管从00-99,代码怎么写
单片机_两个数码管显示00~99 \/按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2 接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)\/\/ 按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2 接LED数码管的A- -H并...

编个单片机程序,按键控制动态数码管显示00-32,位码是P1-6,P1-7,段码...
在51单片机上编写一个程序,实现按键控制数码管显示00到32,位码使用P1-6和P1-7,段码使用P0口。程序中定义了数码管显示和按键控制的函数。程序包含主函数main和两个子函数YS和XS。主函数中通过while循环不断检查按键状态,若按键被按下则调用YS函数去抖动后更新显示值,若数值超过99则置为0,若数值...

51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度_百 ...
include<reg51.h> define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到f uchar number,dat,dattop=10,cnt=0;sbit keyu=P1^0;sbit keyd=P1^1;void t0isr() interrupt 1 { TH0...

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单片机中,用一个按键控制数码管暂停,再次按下时继续计数。下面是我...
void T0_time()interrupt 5 { TH0=(65536-45872)\/256;TL0=(65536-45872)%256;} 这里错了,一是没编完吧,只是中断什么都没有处理呀,二是号错了,应该为1 另外,你的显示和键盘扫描都用延时,会有冲突,漏扫,漏显等会出现 void T0_time()interrupt 1 { TH0=(65536-45872)\/256;TL0=(...

如何用单片机控制数码管
单片机控制数码管分两种。1、静态数码管,控制比较简单,只送段码就可以了。比如:P1=0xc0,共阳极的话,将显示0 2、动态数码管,控制就比较复杂一些,需要先送位选码,再送段码,而且要不断的重复执行这个过程,利用视觉暂留原理,达到显示的效果。

keil 用c51如何编写按键通过74hc164控制两个共阳极数码管
要用74hc164控制两个共阳极数码管,应该用单片机的串口,并用方式0,74HC164的A、B端接P3.0,CLK端接P3.1。四个按键接法错误,是不能识别按键的,应该按下图这接地,不要用二极管。左上角的四个LED是不会亮,也要用下图这种LED,仿真时才会亮。4个LED和4个按键不能与数码管的段控端abcdefg共用...

请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按...
因为你按键的时候影响了数码管刷新;数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态...解决办法 1、改进按键扫描 2、改进数码管显示 3、用嵌入式系统 以上三选一即可解决 ...