定义一个数g,初始化为0,每按下一次键盘g都加1,把第一次的数赋给b显示在数码管上,第二次的数赋给c显示在数码管上,依次类推直到第四位。定义一个确认按键按下后检查密码是否为1112,如果是就。。。。。。如果不是就。。。。。。(必要时可用中断)。用//引起来的程序不对知道方法后要会改程序。

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dun=P2^6;//数码管段选
sbit wei=P2^7;//数码管位选
//sbit beep=P2^3;//定义蜂鸣器IO口
uchar code table[]={//数码管显示数组
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);//延时函数
void jianpan();//键盘扫描函数
void liushuideng();//流水灯
void shumaguan(uchar,uchar,uchar,uchar);//数码管显示函数
uchar aa,bb,cc,g,key,temp,qian,bai,shi,ge,b,c,d,e,a,ee,ff,kk,gg,dd,hh,zz;
uint shu,num,num1;
void main()
{           //先初始化
//    TMOD=0x11;
//      TH0=(65536-45872)/256;
//      TL0=(65536-45872)%256;
//    TH1=(65536-45872)/256;
//      TL1=(65536-45872)%256;
//      EA=1;
//      ET0=1;
//    ET1=1;while(1)   {jianpan();   //不断扫描键盘if(g==1)        //按下第一次b=a;if(g==2)    //按下第二次c=a;if(g==3)    //按下第三次d=a;if(g==4)     //按下第四次e=a;if(cc!=1)shumaguan(b,c,d,e);   //不断扫描数码管把按下的四个数分别显示在数码管上//          if((cc==1)&&(b==1)&&(c==1)&&(d==1)&&(e==2))   //按下确认键(十六进制时那个A键)如果密码为1112
//          shumaguan(qian,bai,shi,ge);
//          if((cc==1)&&((b!=1)||(c!=1)||(d!=1)||(e!=2)))//如果按下确认键密码错误蜂鸣器响流水灯亮
//          {
//              beep=hh;
//              liushuideng();
//          }}
}
void jianpan()
{P3=0xfe;temp=P3;temp=P3&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=P3&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:a=0;g++;break;case 0xde:a=1;g++;break;case 0xbe:a=2;g++;break;case 0x7e:a=3;g++;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:a=4;g++;                break;case 0xdd:a=5;g++;break;case 0xbd:a=6;g++;break;case 0x7d:a=7;g++;break;}                                                    while(temp!=0xf0){temp=P3;temp=temp&0xf0;}                       }}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:a=8;g++;break;case 0xdb:a=9;g++;break;
//                                  case 0xbb:      //确认键打开中断 然后干中断中的事
//                                  {
//                                      TR0=1;
//                                          cc=1;
//                                      shu=b*1000+c*100+d*10+e;
//                                          break;
//                                  }
//                                  case 0x7b:    //按下蜂鸣器不再响流水灯不再流水
//                                  {
//                                    hh++;
//                                      dd=1;
//                                      dd++;
//                                      break;
//                                  }}                                  }while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}
}
void shumaguan(uchar qian,uchar bai,uchar shi,uchar ge)//数码管显示函数
{dun=1;P0=table[qian];dun=0;P0=0xff;wei=1;P0=0xfe;wei=0;delayms(1);dun=1;P0=table[bai];dun=0;P0=0xff;wei=1;P0=0xfd;wei=0;delayms(1);dun=1;P0=table[shi];dun=0;P0=0xff;wei=1;P0=0xfb;wei=0;delayms(1);dun=1;P0=table[ge];dun=0;P0=0xff;wei=1;P0=0xf7;wei=0;delayms(1);
}
void delayms(uint xms)      //延时函数
{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);
}
//void T0time() interrupt 1   //中断
//{
//  TH0=(65536-45872)/256;
//  TL0=(65536-45872)%256;
//  num++;
//  if(num==20)
//  {
//      num=0;
//      ff++;
//      ee--;
//      qian=ee/1000;
//      bai=ee%1000/100;
//      shi=ee%1000%100/10;
//      ge=ee%10;
//      if(ff==5)
//      TR1=1;
//}
//}
//  void T1time() interrupt 3 //中断二进制自减
//{
//  TH0=(65536-45872)/256;
//  TL0=(65536-45872)%256;
//  num1++;
//
//  if(num1==20)
//  {
//      num1=0;
//      TR0=0;
//      kk--;
//      qian=kk/2/2/2%2;
//      bai=kk/2/2%2;
//      shi=kk/2%2;
//      ge=kk%2;
//      if(kk==0)
//      {
//          TR1=0;
//      }
//  }
//}
//void liushuideng()
//{
//  gg=0xfe;
//  while(dd<=1)
//  {
//      jianpan();
//      beep=hh;
//      P1=gg;
//      delayms(500);
//      gg=_crol_(gg,1);
//  }
//  P1=0xff;
//  wei=1;
//  P0=0xf0;
//  wei=0;
//  dun=1;
//  P0=0x3f;
//}

51单片机4位数码管按键显示相关推荐

  1. 51单片机一位数码管汇编程序

    51单片机一位数码管汇编程序 程序: ;数码管从0-9显示ORG 0000HAJMP MAINORG 0030HMAIN: MOV R4, #00H ;记录码表的值MOV DPTR, #TABLE ; ...

  2. 51单片机8位数码管简易计算器(4*4矩阵键盘)

    筒子们,上周参考了好多单片机计算器的文章,但是全文阅读基本都是付费,看了好几篇:参考了某个思路,终于完成了一个简易版的计算器: 1.8位数码管显示 2.简单的四则运算(加减乘除) 3.PS,以下代码目 ...

  3. 51单片机控制动态数码管的显示

    动态数码管的显示 学会设计静态数码管的显示后,我们可以在各个静态数码管显示之间加入延时函数,写进while(1)循环内,这样就能实现动态数码管的显示.根据以前的内容,我们先生成延时函数,然后写一个简单 ...

  4. 51单片机~动态数码管的显示,消影,消抖,静态扫描,动态扫描,由浅入深,原理代码

    动态数码管的显示,由浅入深,原理 (一)视觉暂留: code存储在程序存储器里,表示只读,不加code的数组存在内存里可读可写. #include"reg52.h"typedef ...

  5. 单片机——8位数码管循环显示0-7

    电路设计 汇编 思路:设置段控表和数控表,利用查表法依次输出到P0 P2 ORG 0000H MAIN: MOV R0,#00H L0: MOV A,R0MOV DPTR,#3000HMOVC A,@ ...

  6. 51单片机:动态数码管

    51单片机:动态数码管 目录 51单片机:动态数码管 一.显示原理 1.简介 2.静态显示与动态显示 二.原件使用 1. 74HC138芯片 2. 74HC245芯片 三.硬件连接 四.程序设计 五. ...

  7. 51单片机定时器累加计数(000-999)+4位数码管(循环显示)+Proteus仿真

    51单片机定时器累加计数(000-999)+4位数码管(循环显示)+Proteus仿真 说明:为什么采用4位的数码管,因为Proteus里面没有3位的数码管器件可选,也可以采用2+1,或者1+1+1, ...

  8. 2440 8字数码管 显示0到10 c语言,51单片机对8位数码管依次显示0-7的设计

    共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90} 共阳极数组A~F:display[]={0x88,0x83 ...

  9. 单片机学习笔记————51单片机实现带数码管显示的象棋比赛专用计时器

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

最新文章

  1. python零基础实例-零基础学习Python开发练习100题实例(1)
  2. java怎么不增加临时变量交换值
  3. 字符串的长度超过了为 maxJsonLength 属性设置的值
  4. ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...
  5. signed 与 unsigned 有符号和无符号数
  6. 东方智慧和西方智慧的比较
  7. java binaryreader_Java字符流与字节流区别与用法分析
  8. iPhone不送充电器?工信部发话了
  9. 关于html中table表格tr,td的高度和宽度
  10. pandas nat_利用pandas爬取研招网信息
  11. matlab里面的xlsread函数坏,MATLAB的xlsread坏了
  12. SVN切换IP,不换路径,快捷方法
  13. php 分段mp4合并,下载一个特殊的m3u8视频并合并为MP4
  14. pytest合集(5)— Function函数
  15. 外包公司值不值得去?外包公司的面试特点
  16. 解决win7系统重启后ip丢失问题,即每次电脑重启都要重新设置ip地址,重启后ip地址没了
  17. Linux系统编程.NO7——目录操作函数
  18. 开源精神就意味着免费吗?
  19. 混迹币圈想超越他人,你不得不了解的CCR智能炒币机器人
  20. 设计模式-单一职责原则-实践运用

热门文章

  1. 2019icpc南京网络赛 Holy Grail(SPFA)
  2. fly.io ruby on rails
  3. 计算机桌面怎么自定义,例举电脑桌面图标后怎么自定义设置呢?
  4. VC++6.0 Win32应用程序 如何添加窗体 ------阿冬专栏
  5. 提取OTU表格中分类学名称
  6. STM32学习笔记---触摸屏
  7. 胆固醇PEG胆固醇,CLS-PEG-CLS
  8. WinMerge使用教程
  9. 【TypeScript介绍】一文带你初步了解TypeScript
  10. 21. 查询表sc——查询平均成绩大于等于90分的学生学号和平均成绩