|
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; //報警關
- }
- }
- }
- }
- }
復制代碼
|
|