#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^7;
sbit du = P2^6;
sbit S2 = P3^0;
sbit S3 = P3^1;
sbit S4 = P3^2;
sbit S5 = P3^3;
void delay (uint z)
{
uint x,y;
for(x = z;x>0;x--)
for(y = 114;y>0;y--);
}
uchar code leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void init() //初始化函数
{
we = 1;//打开位选
P0 = 0xf0;//开启前四位数码管
we = 0;//关闭位选
du = 1;//打开段选
TMOD = 0x01;//计数器工作模式1
TH0 = 0x01;//定时器的定时设置50ms
TL0 = 0xfd;
TR0 = 1; //计数器的启动
}
void main()
{
uchar i,count;
init();
while(1)
{
if(TF0 == 1) //计数器满之后再重新开始计数
{
TF0 = 0;
TH0 = 0x01;
TL0 = 0xfd;
count++;
}
if(count == 2)//满1s的情况
{
count = 0;
i++;
if(i>15)
i = 0;
P0 = leddata[i];
}
if(S2 == 0)//S2按下之后的情形即停止计时
{
delay(5);
if(S2 == 0)
{
TR0 = 0;
//while(!S2 )
//{
// TR0 = 1;
//}
}
}
if(S3 == 0)//S3按下之后的情形即启动计时
{
delay(5);
if(S3 == 0)
{
TR0 = 1;
}
}
}
}
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^7;
sbit du = P2^6;
sbit S2 = P3^0;
sbit S3 = P3^1;
sbit S4 = P3^2;
sbit S5 = P3^3;
void delay (uint z)
{
uint x,y;
for(x = z;x>0;x--)
for(y = 114;y>0;y--);
}
uchar code leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void init() //初始化函数
{
we = 1;//打开位选
P0 = 0xf0;//开启前四位数码管
we = 0;//关闭位选
du = 1;//打开段选
TMOD = 0x01;//计数器工作模式1
TH0 = 0x01;//定时器的定时设置50ms
TL0 = 0xfd;
TR0 = 1; //计数器的启动
}
void main()
{
uchar i,count;
init();
while(1)
{
if(TF0 == 1) //计数器满之后再重新开始计数
{
TF0 = 0;
TH0 = 0x01;
TL0 = 0xfd;
count++;
}
if(count == 2)//满1s的情况
{
count = 0;
i++;
if(i>15)
i = 0;
P0 = leddata[i];
}
if(S2 == 0)//S2按下之后的情形即停止计时
{
delay(5);
if(S2 == 0)
{
TR0 = 0;
//while(!S2 )
//{
// TR0 = 1;
//}
}
}
if(S3 == 0)//S3按下之后的情形即启动计时
{
delay(5);
if(S3 == 0)
{
TR0 = 1;
}
}
}
}
该博客介绍了如何使用独立键盘来控制数码管计数器的启动和停止。通过C语言编程,利用定时器进行计数,并在达到一定条件时更新数码管显示。同时,程序中包含了按键S2用于停止计数,S3用于启动计数的逻辑处理。
6057

被折叠的 条评论
为什么被折叠?



