标题:
单片机四位数码管显示程序与Proteus仿真图
[打印本页]
作者:
薛定谔的51
时间:
2021-5-23 16:18
标题:
单片机四位数码管显示程序与Proteus仿真图
按键控制四位数码管的显示值,按一次K0键数码管显示值加一,按一次K1键数码管显示值减一,数码管可以从0000~9999显示,显示9999再按K0键显示值归0000,显示0000再按K1键显示值变为9999。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
四位数码管动态显示.png
(36.16 KB, 下载次数: 91)
下载附件
2021-5-23 16:12 上传
源代码如下
/*80c51*/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key0=P3^2; //定义按键
sbit key1=P3^3;
// '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'
uchar code segtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0-9显示码
char m = 0, n = 0;
void KeyScan(void); //调用函数声明
void Delay(uint cnt);
/******************************************************************/
/* 显示处理函数 */
/******************************************************************/
void Display(void)
{
P2 = 0x01;
P1 = segtab[m%10];
Delay(5); //个位显示
P2 = 0x08;
P1 = segtab[m/10];
Delay(5); //十位显示
P2 = 0x04;
P1 = segtab[n%10];
Delay(5); //百位显示
P2 = 0x02;
P1 = segtab[n/10];
Delay(5); //千位显示
}
/**********************************************************
主程序
***********************************************************/
void main(void)
{
while(1)
{
KeyScan();
Display();
}
}
/****************************************************
按键程序
*****************************************************/
void KeyScan(void)
{
if(key0 == 0)
{
Delay(10); //按键去抖动
if(key0 == 0)
{
m++;
if(m>=100)
{
n++;
m=0;
if(n>=100)
{
m=0;
n=0;
}
}
}
while(!key0);
}
if(key1 == 0)
{
Delay(10); //按键去抖动
if(key1 == 0)
{
m--;
if(m<0)
{
m=99;
n--;
if(n<0)
{
m=99;
n=99;
}
}
}
while(!key1);
}
}
/************************************************
延时程序
*************************************************/
void Delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
复制代码
数码管显示.zip
(40.35 KB, 下载次数: 61)
2021-5-23 16:18 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1