数码管显示0-999内数字三个按键分别控制个位、十位、百位,三个按键按下分别增加1、10、100.

该程序定义了用于数码管显示的数组,并通过按键控制显示不同数字和图形。使用了延时函数实现动画效果,按键K1、K2、K3分别用于控制数字的递增。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<REGX52.h>

unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  /*创建数码管所显示的0-9为数组*/
sbit k1=P3^1;            /*定义按键,P3^1被定义为单片机独立按键区域K1按键*/
sbit k2=P3^0;           /*P3^0被定义为独立按键区域K2按键*/
sbit k3=P3^2;          /*P3^2被定义为独立按键区域K3按键*/
void Delay(unsigned char xms)       /*定义延时函数*/
{

while(xms--)
{
unsigned char i,j;
i=2;
j=239;
do
{
while(--j);
}while(--i);
}
}

void choosesmg(unsigned char Location,led)       /*定义具体某个数码管显示某个特定图形*/
{
switch(Location)
{
case 0:
P2_4=1;P2_3=1;P2_2=1;break;
case 1:
P2_4=1;P2_3=1;P2_2=0;break;
case 2:
P2_4=1;P2_3=0;P2_2=1;break;
case 3:
P2_4=1;P2_3=0;P2_2=0;break;
case 4:
P2_4=0;P2_3=1;P2_2=1;break;
case 5:
P2_4=0;P2_3=1;P2_2=0;break;
case 6:
P2_4=0;P2_3=0;P2_2=1;break;
case 7:
P2_4=0;P2_3=0;P2_2=0;break;
}
P0=table[led];


}

void main()
{
unsigned int i=0,j=0,k=0;
unsigned char a;
while(1)
{
for(a=0;a<36;a++)
{
choosesmg(2,i);
Delay(5);
choosesmg(1,j);
Delay(5);
choosesmg(0,k);
Delay(5);
}
if(k1==0&&i<=9)    /*当按键按下时为低电平,故K1==0*/
i++;
if(k1==0&&i==10){
i=0;
j++;
if(j==10){
j=0;
k++;
}
if(k==10)
k=0;
}
if(k2==0&&j<=9)
j++;

if(k2==0&&j==10)
{
j=0;
k++;
if(k==10)
k=0;
}
if(k3==0&&k<=9)
k++;
if(k3==0&&k==10)

k=0;

}
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值