|
300黑币
下了个程序和仿真,想改一下里面内容
想修改成:
1因为原的按键按它是没有声音的 想改成所有的按键都有蜂鸣器声音 按一次响一次
2按开始定时就开始蜂鸣器就跟着秒滴滴响,数码管到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; //报警关
- }
- }
- }
- }
- }
复制代码
|
|