新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2016-5-23
- 在线时间
- 8 小时
|
5金钱
本帖最后由 mssjwb 于 2016-5-24 14:27 编辑
/*能暂停,但是暂停后不能开始了,请前辈帮看一下,万分感谢*/
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int // 宏定义
#define uchar unsigned char
#define dula P0
#define wela P2
sbit k4 = P3^6; // 位定义
sbit k5 = P3^7;
uint aa,qian,bai,shi,ge,temp;
bit stop = 1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
void delay(uint z); //子函数声明
void display(uint qian,uint bai,uint shi,uint ge);
void init();
void start_timer();
void stop_timer();
void main() //主函数
{
init(); //初始化
while(1)
{
if(k4 == 0) //判断是否按下K4 ,暂停和开始
{
delay(10); //消抖
if(k4 == 0) //再次判断是否按下K4按键
{
while(k4 == 0); //直到按键判断松开
{
if(stop)
start_timer(); //打开定时器
else
stop_timer(); //关闭定时器
stop = ~ stop;
}
}
}
else if(k5 == 0) //按下K5清零
{
delay(10); //消抖
if(k5 == 0) //再次判断是否按下K5按键
{
while(k5 == 0);
{
init();
stop_timer();
stop = 1;
qian=0;
bai=0;
shi=0;
ge=0;
}
}
}
if(aa==2) //数码管显示
{
aa=0;
temp++;
if(temp==9999)
{
temp=0;
}
qian=temp/1000%10; //数码管千位
bai=temp/100%10; //数码管百位
shi=temp/10%10; //数码管十位
ge=temp%10; //数码管个位
}
display(qian,bai,shi,ge);
}
}
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void display(uint qian,uint bai,uint shi,uint ge) //数码管显示子程序
{
dula=table[qian];
wela=0x18;
delay(1);
dula=table1[bai];
wela=0x28;
delay(1);
dula=table[shi];
wela=0x48;
delay(1);
dula=table[ge];
wela=0x88;
delay(1);
}
void start_timer() //开启定时器子程序
{
ET0=1;
EA=1;
TR0=1;
}
void stop_timer() //关闭定时器子程序
{
ET0=0;
EA=0;
TR0=0;
}
void init() //初始化子程序
{
temp=0;
TMOD = 0x01;
TH0=(65536-4608)/256;
TL0=(65536-4608)%256;
}
void timer0() interrupt 1 //定时器延时子程序
{
TH0=(65536-4608)/256;
TL0=(65536-4608)%256;
aa++;
}
|
最佳答案
查看完整内容[请看2#楼]
暂停、启动部分的程序没有问题,应该是6楼说的原因,实际是不能刷新显示了。
void timer0() interrupt 1 //定时器延时子程序
{
TH0=(65536-4608)/256;
TL0=(65536-4608)%256;
aa++;
}
其中的aa++应该修改为temp++,因为你需要显示的是temp。
uint aa,qian,bai,shi,ge,temp,temp1;
temp1=0xff00;
把if(aa==2) 修改成:
if (te ...
|