按键实现0~9999计数器 单片机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

按键调节数码管显示

功能:通过按键加减数码管所显示的数字

按下k1加1,最大加到9999

按下k2减1,最小减到0

按下k3清零复位

C语言程序

//---------------------------------------------------------------------- //名称:按键调节数码管显示

//---------------------------------------------------------------------- //功能:通过按键加减数码管所显示的数字

// 按下k1加1,最大加到9999

// 按下k2减1,最小减到0

// 按下k3清零复位

//---------------------------------------------------------------------- //姓名:陈润源

//地点:内江职业技术学院

//时间:2019年4月6日21:40:41

//---------------------------------------------------------------------- #include

#define uchar unsigned char

#define uint unsigned int

sbit k1 = P1^0; //加

sbit k2 = P1^1; //减

sbit k3 = P1^2; //复位

void key(void);

void display(void);

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90}; //数组

char m=99,n=98; //显示初值,m,n的值决定开机显示数值

//****************************************

//延时程序

//****************************************

void delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

//***********************************************

//显示程序

//***********************************************

void display(void)

{

P2=0X08;

P0=table[m%10]; //显示个位

delayms(5);

P2=0X04;

P0=table[m/10]; //显示十位

delayms(5);

P2=0X02;

P0=table[n%10]; //显示百位

delayms(5);

P2=0X01;

P0=table[n/10]; //显示千位

delayms(5);

}

//***************************************************

//按键处理

//***************************************************

void key()

{

if(k1==0) //检测按键是否被按下

{ //延时消抖

delayms(10);

if(k1==0) //再次检测是否真正按下按键

{

m++; //m自加一

if(m>=100) //如果m加到100则n加一 (限制m的取值范围) 个位、十位最大显示99 {

n++; //n自加一

m=0; //使m又从0开始计数

if(n>=100) //如果n加到100则m=n=99 (限制n的取值范围) 百位、千位最大显示99 {

m=99; //最大显示9999

n=99;

}

}

}

while(!k1); //按键松开

}

if(k2==0) //检测按键是否被按下

{ //延时消抖

delayms(10); //再次检测是否真正按下按键

if(k2==0)

{ //m自减一

m--;

if(m<=0) //如果m减到0则n减一 (限制n的取值范围) 个位、十位最小显示00 {

m=99; //重新给m装初值

n--; //n自减一

if(n==-1) //如果n减到-1,则m=n=0 (限制n的取值范围) 百位、千位最小显示00

{

n=0; //最小显示0000

m=0;

}

}

}

while(!k2); //按键松开

}

if(k3==0) //检测按键是否被按下

{

delayms(10); //延时消抖

if(k3==0) //再次检测是否真正按下按键

{

m=0; //复位,显示0000

n=0;

}

while(!k3); //按键松开

}

}

void main()

{

while(1)

{ //调用按键检测

key(); //数码管显示

相关文档
最新文档