用C语言实现51单片机按键的功能!接有四位八段数码管共四个按键,用于为数码管移位加减!!求大神

用C语言实现51单片机按键的功能!接有四位八段数码管共四个按键,用于为数码管移位加减!!求大神,第1张

给你一个程序吧,如果显示不正常,就把显示的段码或者位码做相应的修改即可,有什么不清楚的也可以追问

#include<reg52.h>

typedefunsigned char u8

typedef unsigned int u16

u8 DispBuf[4]//显示

sbitRL = P1^0//左移键

sbitRR = P1^1//右移键

sbitADD = P1^2//加1键

sbitSUB = P1^3//减1键

void Disp(void)

void Delay(void)

u8 code Led[]={

0x3F,// 0

0x06,// 1

0x5B,// 2

0x4F,// 3

0x66,// 4

0x6D,// 5

0x7D,// 6

0x07,// 7

0x7F,// 8

0x6F//游腊 9

}

void Disp(void)

{

u8 i,j = 0x01

for(i = 0i <4i ++)

{

P0 = ~Led[DispBuf[i]]

P2 = j | 0xf0

j <<= 1

Delay()

P0 = 0xff

P2 &= 0xf0

}

}

void Delay(void)

{

u16 i

for(i = 1000i != 0i --)

}

void main(void)

{

u8 i = 0

DispBuf[0] = 0

DispBuf[1] = 1

DispBuf[2] = 2

DispBuf[3] = 3

for()

{

Disp()

if(!RL)//左移

{

Disp()

Disp()

if(!RL)

{

i --

if(i == 0 || i >4)

i = 4

while(!RL)

Disp()

}

}

if(!RR)/神昌滑/右移

{

Disp()

Disp()

if(!RR)

{

if(++ i >4)

i = 1

while(!RR)

Disp()

}

}

if(!ADD)//加1

{

Disp()

Disp()

if(!ADD)

{

if(i != 0)

{

if(++ DispBuf[i - 1] >9)

DispBuf[i - 1] = 0

}

while(!ADD)

Disp()

}

}

if(!SUB)//减迅核1

{

Disp()

Disp()

if(!SUB)

{

if(i != 0)

{

if(-- DispBuf[i - 1] >9)

DispBuf[i - 1] = 9

}

while(!SUB)

Disp()

}

}

}

}

你好,这是我用89C2051写誉肆的时钟程序,约2K BIT,如雀闷下是一个按键为移位的程序.:

CASE0,CASE1就是功能转庆岁轿换,

另两个按键分别为加减,且有加速功能.程序功能强大,容量小,是我得意之作.

尊重他人知识,请不抄袭.

程序很长,这是片断,如你有意用我的硬件,软件方案,请联系.多谢!

void scan_enter_key()

{

unsigned char data time_key=0

if(enter_key==0)

{

dely_ms55()//while(~ms55)//while(ms55)

//if(enter_key==0)

{ if(enter_key==0&&ad_key==0){while(enter_key==0){dely_ms55()time_key=70min50=0} }

if(enter_key==0){while(enter_key==0){dely_ms55()time_key++min50=0} }

if(time_key>10){ se=~se

if(psw_psw==0)

{be0_ok=~be0_okif(be0_ok==1)bell_1s()}

if(psw_psw==1)

{

if(B_OutA_Time_end==1&&B_OutB_Time_end==1)

{ OutA_Time_H=OutA_Time_M=0

OutB_Time_H=OutB_Time_M=0

B_OutA_Time_end=B_OutB_Time_end=0

}

Bcount_on=1be1_ok=~be1_ok

if(be1_ok==1)bell_1s()}

if(time_key>60)//3--10秒 是否铃响?/?//按下大于6秒,该状态数据清零

{

switch(psw_psw)

{

case 0:hour=min=ms51=0mon=day=1break

case 1:B_Run_Able=~B_Run_Ablebreak

default:time_key=0break

}

}//是否清除 ?

}

else {

se=0psw_psw++if(psw_psw>1){psw_psw=0} //

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12428193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存