搞了个程序和仿真,想改一下里面内容
想修改成:
按一次按键就响一次
按开始数秒就开始滴滴响 数码管到10秒节奏就越来越快 到2秒 就一直响
加个led和蜂鸣器一样工作
#include<reg51.h>
#include<intrins.h>
#include<absacc.h> //头文件
#define ui unsigned int
#define uc unsigned char //宏定义
uc code tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //码表0~9
uc code tab2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //码表带点0~9
sbit jiabaiwei=P1^0; //加百位按键(分加)
sbit daojishi=P1^1; //倒计时
sbit zhanting=P1^2; //暂停
sbit jiashiwei=P1^3; //加十位(秒十位)
sbit jiagewei=P1^4; //加个位(秒个位)
sbit baojing=P3^7; //蜂鸣器
bit flag1; //标志位
uc n;
char qian,bai,shi,ge,miao,fen;//变量
void delay(ui k) //延时函数
{
ui i,j;
for(i=0;i<k;i++)
for(j=0;j<10;j++);
}
void init() //初始化函数
{
TMOD=0x01; //定时器0工作方式1
EA=1; //开总中断
ET0=1; //定时器0中断开
TH0=0x3c;
TL0=0xb0; //附初值
flag1=1; //变量附1
}
void xianshi() //显示子函数
{
qian=fen/10; //分十位
bai=fen%10; //分个位
shi=miao/10; //秒十位
ge=miao%10; //秒个位
P0=0x00;
P2=0xf7; //让数码管第一个位亮(送位选信号)
P0=tab1[ge]; //送段
delay(10); //延时
P0=0x00;
P2=0xfb; //让数码管第二个位亮(送位)
P0=tab1[shi]; //送位选信号
delay(10); //延时
P0=0x00;
P2=0xfd; //让数码管第三个位亮(送位选信号)
P0=tab2[bai]; //送位选信号
delay(10); //延时
P0=0x00;
P2=0xfe; //让数码管第四个位亮(送位选信号)
P0=tab1[qian]; //送位选信号
delay(10); //延时
P0=0x00;
}
void anjian() //按键子函数
{
if(jiabaiwei==0) //加百位按键(分加)
{
delay(30); //延时去抖
if(jiabaiwei==0) //确定按键按下
{
fen=fen+1; //分自加
if(fen>59) //如果分大于59
fen=0; //分归零
}
while(!jiabaiwei); //等待按键释放
}
else if(daojishi==0)
{
delay(30); //延时去抖
if(daojishi==0) //确定按键按下
{
if((miao!=0)||(fen!=0)) //如果分和秒不同时等于0
TR0=1; //定时器0开
flag1=1; //开始倒计时标志位
}
while(!daojishi); //等待按键释放
}
else if(zhanting==0) //如果暂停按键按下
{
delay(30); //延时去抖
if(zhanting==0) //确定按键按下
{
TR0=0; //关定时器
}
while(!zhanting); //等待按键释放
}
else if(jiashiwei==0) //如果秒十位加按键按下
{
delay(30); //延时去抖
if(jiashiwei==0) //确定按键按下
{
miao=miao+10; //秒自加10
if(miao>59) //如果秒大于59
miao=miao%10; //秒取余
}
while(!jiashiwei); //等待按键释放
}
else if(jiagewei==0) //如果加秒个位的按键按下
{
delay(30); //延时去抖
if(jiagewei==0) //确定按键按下
{
miao=miao+1; //秒+1
if(miao>59) //如果秒大于59
{
miao=0; //秒归零
fen++; //分+1
}
}
while(!jiagewei); //等待按键释放
}
}
void main() //主函数
{
init(); //初始化函数
while(1)
{
anjian(); //按键函数
xianshi(); //显示函数
}
}
void zhongduan() interrupt 1 //定时器0
{
TH0=0x3c;
TL0=0xb0; //重附初值50ms
n++;
if(n>=20) //如果到1s(n=20就是1s的时间)
{
n=0; //n 清零
if(flag1==1) //如果 flag1等于1的时候
{
miao--;
if(miao<0)
{
if(fen>0)
{
fen--;
miao=59;
}
else
{
fen=miao=0;
}
}
if((miao<=10)&&(fen==0)) //如果秒小于10并且分等于0
{
baojing=~baojing; //报警取反
if(miao==0) //如果秒等于1
{
flag1=0;
miao=0; //秒清零
fen=0; //分清零
TR0=0; //关定时器
baojing=1; //报警关
}
}
}
}
}