按键加减法显示
//上一个案例所显示的最大数字为8,本例重新编写程序,在数码管上显示000~255范围内的
//任意整数,而且,在不松开按键时,数字会按一定时间间隔持续递增或递减。
//本例要点在于函数shi_xian_chengxu的编写,0~255之间的整数要显示
通过网盘分享的文件:按键加减法显示
链接: https://pan.baidu.com/s/1P03FpHvAt6zzzw81L3PVHQ 提取码: yjcq
#include<reg51.h>#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//数码管数字
uchar code shu_zi[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF};
//特显示的3位数
uchar shu_zi_zai_cu[]={0,0,0};
uchar an_jian,ji_shu=0;
//延时
void yan_shi(uint ms)
{ uchar i,j;
for(j=0;j<ms;j++)
for(i=0;i<120;i++);
}
//显示程序
void shi_xian_chengxu()
{
uchar i ,j=0x01,w;
shu_zi_zai_cu[2]=ji_shu/100; //取100位上的数
shu_zi_zai_cu[1]=ji_shu/10%10;//取10位上的数
shu_zi_zai_cu[0]=ji_shu%10;//取个位上的数
if(ji_shu<10)w=1;//显示1位数码管
if(ji_shu>9)w=2;//显示2位数码管
if(ji_shu>99)w=3;//显示3位数码管
//扫描数码管
for(i=0;i<w;i++)
{
j=_cror_(j,1);//_cror_函数定义在单片机或特定硬件的位操作库中,
// 通常用于实现二进制位的循环右移。例如,将变量i的二进制位循环右移1位,低位补零
P3=j;
P2=shu_zi[shu_zi_zai_cu[i]];
yan_shi(1);
}
}
//主程序
void main()
{
uchar i,j=0;
P1=0XFF;//按键复位
P2=0XFF;
P3=0X00;//数码管复位。黑屏
while(1)
{
shi_xian_chengxu();
P1=0XFF;
an_jian=P1;
if(an_jian!=0xff)
for(i=0;i<30;i++)
shi_xian_chengxu();
switch(an_jian)
{
case 0XFE: if(ji_shu<=255)ji_shu++;
//unsigned char类型的最大值(即255)加1时,会发生溢出。
//在无符号类型中,溢出会导致结果从最大值循环回到最小值。
break;
case 0XFD: if(ji_shu>=0)ji_shu--;
break;
case 0XFB: ji_shu=0;
}
while(P1!=0XFF)shi_xian_chengxu();
}
}








最新发布