標題:
求大神幫忙改一下單片機定時控制器程序
[打印本頁]
作者:
sav98
時間:
2018-3-26 21:30
標題:
求大神幫忙改一下單片機定時控制器程序
這是一個單片機定時控制器,數(shù)碼的大神幫我寫的。想要加入蜂鳴器功能,按鍵時響一下,定時結束時長響一下,另外繼電器控制部分不能用,時什么原因?
/********************************************************
*
*proteus仿真中晶振電路及復位電路自行添加
*晶振:12M
*
*
*********************************************************/
#include <reg51.h>
sbit K1=P2^0; // 開始
sbit K2=P2^1; // 加
sbit K3=P2^2; // 減
sbit relay=P2^7;
sbit wei1=P3^6;
sbit wei2=P3^7;
bit flag=0; //
int L[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)碼管段選數(shù)據(jù) 根據(jù)實際電路修改
int wei[8]={0xbf,0x7f}; //數(shù)碼管位選信號 根據(jù)實際電路修改
unsigned char dat[2];
unsigned char remaining_time=30;
/************延時***************/
void delay(int i)
{
int x,y;
for(x=i;x>0;x--)
for(y=125;y>0;y--);
}
void main(void)
{
relay=1;
TMOD = 0x01; //定時器0 方式一
TH0 = 0x0FC; //10ms計時高8位
TL0 = 0x18; //10ms計時低8位
EA = 1; //開啟總中斷
ET0 = 1; //開啟定時器0中斷
TR0 = 1; //開啟定時器0計數(shù)
while(1)
{
if(!K1) //判斷K1鍵 //開始計時
{
delay(10); //按鍵去抖
if(!K1)
{
flag=~flag;
if(flag){
remaining_time=remaining_time/10*10;
}else remaining_time=30;
while(!K1); //等待按鍵彈起
}
}
if(!K2) //判斷K2鍵 +10
{
delay(10); //按鍵去抖
if(!K2)
{
remaining_time=remaining_time/10*10+10;
if(remaining_time>60) remaining_time=10;
while(!K2); //等待按鍵彈起
}
}
if(!K3) //判斷K3鍵 -10
{
delay(10); //按鍵去抖
if(!K3)
{
remaining_time=remaining_time/10*10-10;
if(remaining_time<10) remaining_time=60;
while(!K3); //等待按鍵彈起
}
}
}
}
void Timer0Interrupt(void) interrupt 1 //10ms中斷
{
static unsigned int timer0_num=0;
static unsigned char show_flag=0;
TH0 = 0x0D8; //中斷初值重裝
TL0 = 0x0F0;
if(flag){
flag=1;
if(++timer0_num>=600){ //6000次中斷為6000*10ms=1min
timer0_num=0;
if(--remaining_time==0){
remaining_time=30;
relay=0;
flag=0;
}
}
}
dat[0]=L[remaining_time%100/10];
dat[1]=L[remaining_time%10]| (flag?0x80:0);
P3=0xff; //去重影
P1=dat[show_flag]; //P1段選 根據(jù)實際電路修改
wei1=show_flag;
wei2=!show_flag;
show_flag=!show_flag;
}
復制代碼
作者:
sav98
時間:
2018-3-28 22:01
期待大神解惑
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1