51单片机4位数码管按键显示
定义一个数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位数码管按键显示相关推荐
- 51单片机一位数码管汇编程序
51单片机一位数码管汇编程序 程序: ;数码管从0-9显示ORG 0000HAJMP MAINORG 0030HMAIN: MOV R4, #00H ;记录码表的值MOV DPTR, #TABLE ; ...
- 51单片机8位数码管简易计算器(4*4矩阵键盘)
筒子们,上周参考了好多单片机计算器的文章,但是全文阅读基本都是付费,看了好几篇:参考了某个思路,终于完成了一个简易版的计算器: 1.8位数码管显示 2.简单的四则运算(加减乘除) 3.PS,以下代码目 ...
- 51单片机控制动态数码管的显示
动态数码管的显示 学会设计静态数码管的显示后,我们可以在各个静态数码管显示之间加入延时函数,写进while(1)循环内,这样就能实现动态数码管的显示.根据以前的内容,我们先生成延时函数,然后写一个简单 ...
- 51单片机~动态数码管的显示,消影,消抖,静态扫描,动态扫描,由浅入深,原理代码
动态数码管的显示,由浅入深,原理 (一)视觉暂留: code存储在程序存储器里,表示只读,不加code的数组存在内存里可读可写. #include"reg52.h"typedef ...
- 单片机——8位数码管循环显示0-7
电路设计 汇编 思路:设置段控表和数控表,利用查表法依次输出到P0 P2 ORG 0000H MAIN: MOV R0,#00H L0: MOV A,R0MOV DPTR,#3000HMOVC A,@ ...
- 51单片机:动态数码管
51单片机:动态数码管 目录 51单片机:动态数码管 一.显示原理 1.简介 2.静态显示与动态显示 二.原件使用 1. 74HC138芯片 2. 74HC245芯片 三.硬件连接 四.程序设计 五. ...
- 51单片机定时器累加计数(000-999)+4位数码管(循环显示)+Proteus仿真
51单片机定时器累加计数(000-999)+4位数码管(循环显示)+Proteus仿真 说明:为什么采用4位的数码管,因为Proteus里面没有3位的数码管器件可选,也可以采用2+1,或者1+1+1, ...
- 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 ...
- 单片机学习笔记————51单片机实现带数码管显示的象棋比赛专用计时器
一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...
最新文章
- python零基础实例-零基础学习Python开发练习100题实例(1)
- java怎么不增加临时变量交换值
- 字符串的长度超过了为 maxJsonLength 属性设置的值
- ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...
- signed 与 unsigned 有符号和无符号数
- 东方智慧和西方智慧的比较
- java binaryreader_Java字符流与字节流区别与用法分析
- iPhone不送充电器?工信部发话了
- 关于html中table表格tr,td的高度和宽度
- pandas nat_利用pandas爬取研招网信息
- matlab里面的xlsread函数坏,MATLAB的xlsread坏了
- SVN切换IP,不换路径,快捷方法
- php 分段mp4合并,下载一个特殊的m3u8视频并合并为MP4
- pytest合集(5)— Function函数
- 外包公司值不值得去?外包公司的面试特点
- 解决win7系统重启后ip丢失问题,即每次电脑重启都要重新设置ip地址,重启后ip地址没了
- Linux系统编程.NO7——目录操作函数
- 开源精神就意味着免费吗?
- 混迹币圈想超越他人,你不得不了解的CCR智能炒币机器人
- 设计模式-单一职责原则-实践运用