|
以前發表過一個51單片機的,參考微波爐的方式,按一下加1分鐘,運行的時候可以隨時修改時間。現在把程序移植到15單片機上并優化。不再使用三極管擴流,用單片機推挽模式直接驅動,減少元件數量,能省就省。2,定時時間1-99分鐘,使用4位數碼管顯示倒計時時間,倒計時結束蜂鳴器響,繼電器斷開。
制作出來的實物圖如下:
20202721036.jpg (239.19 KB, 下載次數: 108)
下載附件
運行
2020-2-7 21:00 上傳
電路原理圖如下:
截圖04.jpg (58.46 KB, 下載次數: 82)
下載附件
原理圖
2020-2-7 20:55 上傳
代碼如下:
#include<STC15.h>
#define KeyPort P1
unsigned char KeyV,TempKeyV,num;
/////////////// 定義數碼管 ////////////////
sbit DS1=P3^7; //數碼管第1位
sbit DS2=P3^6; //數碼管第2位
sbit DS3=P3^5; //數碼管第3位
sbit DS4=P3^4; //數碼管第4位
//////////////////定義按鍵 /////////////////
sbit Key_UP=P1^0; ///啟動
sbit Key_DOWN=P1^1; ///停止
sbit PA=P1^2; ///時間加
sbit PB=P1^3; ///時間減
//////////////////定義輸出 /////////////////
sbit JDQ=P1^5; //繼電器
sbit FMQ=P1^6; //蜂鳴器
sbit LED1=P1^4; //LED啟動
sbit LED2=P1^7; //LED停止
unsigned int js;
unsigned int ds=100,x,y;//倒計時初始時間,加時,減時 30分鐘
unsigned char jsflag;
static unsigned int i;
unsigned char code LEDDis[]={
0xBF,/*0*/
0x86,/*1*/
0xDB,/*2*/
0xCF,/*3*/
0xE6,/*4*/
0xED,/*5*/
0xFD,/*6*/
0x87,/*7*/
0xFF,/*8*/
0xEF,/*9*/
};
unsigned char KeyScan(void);//鍵盤掃描
void tiaojie(void);
void Delay(unsigned int ii) //1MS
{
unsigned int jj;
for(;ii>0;ii--)
for(jj=0;jj<125;jj++);
}
void main()
{
EA = 1; //允許CPU中斷
ET0 = 1; //定時器0中斷打開
ET1=1; //定時器1中斷打開
TMOD = 0x11; //設定時器0 1為模式1,16位模式
TH0=0xB8;
TL0=0x00; //設定時值為(20ms)
TH1=0xdc; //設定時值為(10ms)
TL1=0x00;
TR0 = 1;
TR1=1;
KeyV = 0;
TempKeyV = 0;
jsflag=0;
while(1);
}
//定時器0中斷外理中鍵掃描和顯示
void Key_Time0(void) interrupt 1 using 2
{
TH0=0xB8;
TL0=0x00; //設定時值為20000us(20ms)
if (!Key_UP)
KeyV = 1;
if (!Key_DOWN)
KeyV = 2;
if(PA==0)
{
Delay(20);
if(PA==0)
ds=ds+100; //定時加1分鐘
while(!P12);
}
if(PB==0)
{
Delay(20);
if(PB==0)
ds=ds-100; //定時減1分鐘
while(!P13);
}
if (KeyV!= 0) //有鍵按下
{
Delay(10); //延時防抖 按下10ms再測
if (!Key_UP)
TempKeyV = 1;
if (!Key_DOWN)
TempKeyV = 2;
if (KeyV == TempKeyV) //兩次值相等為確定接下了鍵
{
if (KeyV == 1)
{
jsflag=0;
if(ds==0)
{ ds=100;
}
js=js+1;
JDQ=0; //繼電器吸合
FMQ=1; //蜂鳴器不響
LED1=0; //LED不亮
LED2=1; //LED亮
if(js==50)
{
js=0;
ds=ds-1;
}
}
if(KeyV==2)
{
jsflag=1;
}
}
}
if(jsflag==1)
{
JDQ=1; //繼電器斷開
FMQ=0; //蜂鳴器響
LED1=1; //LED亮
LED2=0; //LED不亮
}
if(ds==0)
{ JDQ=1; //繼電器斷開
FMQ=0; //蜂鳴器響
LED1=1; //LED亮
LED2=0; //LED不亮
jsflag=1;
KeyV=0;
}
}
//////////////顯示函數
void disp_Time1(void) interrupt 3 using 3
{
P2M1 = 0x00; P2M0 = 0xFF; //P0口強推挽模式
TH1=0xdc;
TL1=0x00;
x=ds/10000;
y=(ds%10000)/1000; //分鐘十位
P2=LEDDis[y];
DS1=0;
Delay(2);
DS1=1; //消隱
P2=LEDDis[((ds%10000)%1000)/100];//分鐘各位
DS2=0;
Delay(2); //消隱
DS2=1;
P2=LEDDis[(((ds%10000)%1000)%100)/10]; //秒十位
if(((ds%1000)%100)/10>=6) //滿60,百位減一
{
ds=ds-10;
P2=LEDDis[6];
}
DS3=0;
Delay(2);
DS3=1; //消隱
P2=LEDDis[(((ds%10000)%1000)%100)%10]; //秒個位
DS4=0;
Delay(2);
DS4=1; //消隱
}
|
-
-
15F204共陰版本.rar
2020-2-7 21:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
137.57 KB, 下載次數: 124, 下載積分: 黑幣 -5
評分
-
查看全部評分
|