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

作者&投稿:钟怕 (若有异议请与网页底部的电邮联系)
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是自锁的吗?互锁吗?


单片机可以实现一个独立按键控制数码管多个数字吗?
一个按键控制4个数码管显示4个数,最简单的方法是按一次键计一个数,最大数是9999,即可显示四位数。再简单点,按一次键开始自动计数,最大数还是9999,再按一次键停止计数。这样控制程序好写。长按和短按对于初学者有点难,当然了,要能写出程序来是最好啦。

单片机按键控制数码管显示
1、按键子程序:实现按第一个键使键值keyvalue=1,第二个键使键值keyvalue=2,第三个键使键值keyvalue=3 2、显示子程序 定义3个字节的显示缓存,如dispbuf1,dispbuf2,dispbuf3 使dispbuf1的数字显示在第一个数码管上,dispbuf2的数字显示在第2个数码管上,dispbuf3的数字显示在第3个数码管上 3...

51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
1、首先,要把代码写好,点亮数码管。2、代码写完后,要确认原先写好的代码是不是正确的。3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、最...

单片机用1个按键控制60秒定时,通过2个数码管显示。按一下启动,再按停止...
MOV A,P3 ;直等到按键放下,则算作一次 ANL A,#0FFH CJNE A,#0FFH,KEY_CE SETB KEYCARD ;真的有键按下,则置标志位 RET DELAY1S: ;延时函数 MOV R7,#10 D1:MOV R6,#50 DJNZ R6,DJNZ R7,D1 RET ASCII: DB 0C0H,0F9H,0A4H,0B0H,099H DB ...

单片机中怎样设置一个变量控制按键数
可以有位定位的位变量来控制按键,也可以用端口来控制。当按键被按下的时候,电路导通接地,I\/O口为低电平。当按键未被按下时,电路断开,I\/O口保持高电平。当检测到某一个按键按下时,对我们设置的一个变量(下边用keynumber)赋值,这样就实现了输入的效果。一般的按键所用开关为机械弹性开关,当...

单片机控制数码管1 按键控制开始、数码管循环显示0-F.时间间隔为1s的程...
P3.2外接一个按键,按下后,接地,用来起动.ORG 0000H JB P3.2,MOV R2, #0 LOOP:INC R2 MOV A, R2 ANL A, #0FH MOV DPTR, #TAB MOVC A, @A+DPTR MOV P1, A LCALL DL500MS LCALL DL500MS SJMP LOOP TAB:DB 0c0H,0f9H,0a4H,0b0H, ...

能帮我编一个单片机第1个按键控制数码管显示1,第2个按键控制数码...
参考一下这个仿真实例,16个按键,按键1 显示1,---按键9显示9,等等 下载 附件 仿真试试。

单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上...
D1: MOV R6,#250 DJNZ R6,DJNZ R7,D1 RET TAB: DB ; 自己去查数码管0~9的代码;共阳的 这是51单片机的,12MHz晶振 再给你补个C的,我这的按键可以做实际产品的,无偿给你咯,共享,呵呵!愿你努力学习 啊!include<reg52.h> define uchar unsigned char define ui...

c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序_百 ...
1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...

汇编语言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、显示程序也进行了修改,唯独...

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

营口市15735808776: 51单片机怎样用按键实现数码管位切换 -
竺丁美罗: 这要写程序,也是稍麻烦一点的. 大概思路是这样的,用一个按键切换显示位,按一下,切换一位,是这样吧. 用一个变量计数,每按一次键加1,一共切换多少位,就计数到多少.计到最大再回到第一位计数.例,四位数码管,计数为0,1,2,3,超过3就回0. 好了,按键解决了,再解决显示的,计数值对的数码管,让它显示出小数点,就是要调整的位.按键切换数码管,就是显示小数点的位在切换. 最后是,变量值的修改,根据按 键计数值,来判断那个变量要调整修改,做相应的加1,或减1计算就行了.

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

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

营口市15735808776: 如何在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 void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } uchar ...

营口市15735808776: 51单片机怎么按键切换数码管的位用来调时 -
竺丁美罗: 你先把你需要的功能描述清楚,然后再请人帮你写程序. 比如说,按键分几种动作(就点动/长按/连续点动?),每一种按键动作,触发什么功能(进入设置模式/加/减/移动/结束设置),显示的格式是 怎样,硬件原理图.

营口市15735808776: 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; ...

营口市15735808776: 使用89C51单片机单个按键控制一个数码管,当按键按下时数码管显示1,再次按下时显示0. -
竺丁美罗: 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;

营口市15735808776: 51单片机怎样设按键切换数码管显示时间和日期? -
竺丁美罗: 你要设置一个标志变量,如flag,在进入按键程序后,flag++; 然后加个控制判断语句 if(flag>3) flag=0; 这样,在显示模块中再加入开关语句; switch(flag) { case 0:...显示时间.. case 1:...显示日期... case 2:...显示温度... }

营口市15735808776: 51单片机 独立键盘控制静态数码管 -
竺丁美罗: 定义开关引脚 sbit k1=P1^0; sbit k2=P1^1; 依次类推,向下定义 void main() { while(1) { if(k1==0) P2=0xC0; //显示0的代码 if(k2==0) P2=***; //显示0的代码 依次类推} } 希望对你有帮助.

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