标题:
这个单片机程序如何在按下按键的时候,数码管能正常显示?
[打印本页]
作者:
108880802
时间:
2020-5-13 10:22
标题:
这个单片机程序如何在按下按键的时候,数码管能正常显示?
#include"reg51.h"
sfr P4=0xE8;
#define led P2/*定义P2端口*/
typedef unsigned int u16;
typedef unsigned char u8;
sbit k2=P3^3 ;
sbit k1=P4^2 ;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 a,b,c,d[8],e,i,r;
void delay(i)
{
while(i--);
}
void InitTimer0(void)
{
TMOD = 0x01; /*定时一毫秒*/
TH0 = 0xFC;
TL0 = 0x59;
EA = 1;
ET0 = 1;
TR0 = 0;/*关闭计数器*/
}
void dd()/*计算数值*/
{
d[0]=smgduan[c%10];
d[1]=smgduan[c/10];
d[2]=0x40;
d[3]=smgduan[b%10];
d[4]=smgduan[b/10];
d[5]=0x40;
d[6]=smgduan[a%10];
d[7]=smgduan[a/10];
}
void kk()/*按键*/
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
led=0xa3;e++;TR0=!TR0;/*开计数器*/
}
if(e==2)
{
e=0;led=0x63;
}while(!k1);
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
a=0;b=0;c=0;TR0=0;/*关计数器*/
}while(!k2);
}
}
void show()
{
for(i=0;i<8;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;break;
case(1):
LSA=1;LSB=0;LSC=0;break;
case(2):
LSA=0;LSB=1;LSC=0;break;
case(3):
LSA=1;LSB=1;LSC=0;break;
case(4):
LSA=0;LSB=0;LSC=1;break;
case(5):
LSA=1;LSB=0;LSC=1;break;
case(6):
LSA=0;LSB=1;LSC=1;break;
case(7):
LSA=1;LSB=1;LSC=1;break;
}
P0=d[i];
delay(100);
P0=0x00;
}
}
void main(void)
{
InitTimer0();
while(1)
{
dd();
kk();
show();
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0xFC;/*定时一毫秒*/
TL0 = 0x59;
r++;
if(r>=50)
{
r=0;
c++;
if(c>=20)
{
c=0;
b++;
}
if(b>=60)
{
b=0;
a++;
}
if(a>=60)
{
a=0;
}
}
}
复制代码
作者:
108880802
时间:
2020-5-13 16:10
要求:
利用定时器0、灯光、数码管模块和两个独立摁键,设计一个秒变,具有清零,暂停,启动功能。
1.显示格式为:
分-秒-0.05毫秒(既50ms)
08-26-18表示:8分26秒900毫秒
2.独立摁键s4为:启动/暂停
独立摁键s5为:清零
摁键均为摁下有效。
3.暂停时只有L1亮,启动时只有L2亮
作者:
wulin
时间:
2020-5-13 21:43
把数码管显示程序改一下发到定时器中断服务程序中就可以避免按键干扰。
void show()
{
P0=0x00;
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;break;
case(1):
LSA=1;LSB=0;LSC=0;break;
case(2):
LSA=0;LSB=1;LSC=0;break;
case(3):
LSA=1;LSB=1;LSC=0;break;
case(4):
LSA=0;LSB=0;LSC=1;break;
case(5):
LSA=1;LSB=0;LSC=1;break;
case(6):
LSA=0;LSB=1;LSC=1;break;
case(7):
LSA=1;LSB=1;LSC=1;break;
}
P0=d[i];
i++;
i%=8;
}
复制代码
作者:
108880802
时间:
2020-5-14 09:51
wulin 发表于 2020-5-13 21:43
把数码管显示程序改一下发到定时器中断服务程序中就可以避免按键干扰。
???
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1