標(biāo)題:
不會。
[打印本頁]
作者:
1123212
時間:
2016-6-2 16:17
標(biāo)題:
不會。
//控制過程是計時開始時:OUT=0;計時過程有聲音,OUT=0;后5秒KV=0;結(jié)束前5秒KV=1; 結(jié)束時OUT=1;并一直報警。
//OUT=0;后5秒KV=0;沒整好。有不規(guī)范的地方,也請規(guī)范一下。
#include<STC15.h>
#define ulong unsigned long
char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#define LED P1 //P1為數(shù)碼管的段選
sbit W1=P3^7; //P37為數(shù)碼管的位選
sbit W2=P3^1; //P31為數(shù)碼管的位選
sbit W3=P3^0; //P30為數(shù)碼管的位選
sbit time_shift=P3^4; //P3^4為"移位"按鍵
sbit time_set=P3^5; //P3^5為"修改"按鍵
sbit set_inc=P3^2; //P3^2為"增加"按鍵
sbit time_run=P3^3; //P3^3為"計時開始暫停"按鍵
sbit OUT=P2^4; //P5^4為MA高壓開,P24仿真。
sbit KV=P2^5; //P5^5為升壓輸出,P25仿真。
sbit KVI=P2^6; //P2^6為KV狀態(tài)檢測
sbit LI=P3^6; //P3^6為MA過流輸入
sbit WA=P2^7; //P3^7為無MA輸入
sbit GU=P1^7; //P1^7為MA過流故障燈
sbit LIGHT=P2^3; //P2^3
sbit SPEAKER=P2^7; //P2^7喇叭
unsigned char sec,min,sec_ge,sec_shi,min_ge,min_shi,t; //定義秒,分,時,秒的個位,十位,分的個位,十位
int state; //秒表狀態(tài)指示 0-計時暫停 1-正在倒計時 2-計時時間參數(shù)修改
int flag; //秒表修改數(shù)據(jù)指示 0-分鐘十位 1-分鐘個位 2-秒鐘十位 3-秒鐘個位
int blink;
//---------------------------------------------------------------------
void init();
void display_run();
void display_pause();
void delay(int);
void time_modify();
//---------------------------------------------------------------------
void main()
{
init();
state=0;
flag=0;
blink=1;
t=0;
LIGHT=1;
SPEAKER=1;
OUT=1;
KVI=1;
min=2;
sec=0;
sec_ge=0; //秒的個位和十位
sec_shi=0;
min_ge=2; //分的個位和十位
while(1)
{
if(time_set==0) //如果"調(diào)時"按鍵按下
{
delay(5); //延時去抖
if(time_set==0)
state=2;
}
if(state==0)
{
TR0=0;
TR1=0;
display_pause();
}
if(state==0)
{
OUT=1;
display_pause();
}
if(state==1)
{
TR0=1;
TR1=0;
display_run();
}
if(state==2)
{
TR1=1;
OUT=1;
time_modify();
}
if(state==1)
{
TR1=1;
OUT=0;
time_modify();
}
if(state==1)
{
OUT=0;
time_modify();
}
if(state==1)
{ if(KVI==0)
{time_set=0;
delay(5); //延時
OUT=1;
time_modify();
}
}
}
}
//---------------------------------------------------------------------
void init()
{
TMOD=0x11;
EA=1; //開總中斷
ET0=0;
ET1=0; //定義定時器0工定時器1作與方式1
TH0=0x4d; //定時器0賦初值
TL0=0xfc;
TH1=15536/256; //定時器1賦初值
TL1=15536%256;
//中斷初始化
EX0=1;
PX0=0;
IT0=1;
EX1=1;
PX1=1;
IT1=1;
}
//外中斷1
void INT_1() interrupt 2 using 0
{
if( time_run==0)//表示按鈕有按下
{
delay(20); //延時
if(time_run==0)
{
state=(state+1)%2;
LIGHT=1;
SPEAKER=1;
}
}
}
//外中斷0
void INT_0() interrupt 0 using 1
{
if( set_inc==0)//表示按鈕有按下
{
delay(20); //延時去抖
if(set_inc==0)
{
switch(flag) //分支結(jié)構(gòu),根據(jù)flag的值來判斷哪一位加1
{
case 0:
{
min=(min+1)%10+min/10*10;
break;
}
case 1:
{
sec=(sec+10)%60;
break;
}
case 2:
{
sec=(sec+1)%10+sec/10*10;
break;
}
default:break;
}
}
}
}
//--------------------------------延時子函數(shù)------------------------------------
void delay(int x)
{
int i,j;
for(i=x;i>0l;i--)
for(j=255;j>0;j--)
;
}
//-------------------------------顯示子函數(shù)---------------------------------------
void display_run()
{
if(TF0==1) //如果定時器溢出
{
TF0=0; //清中斷標(biāo)志位
t++;
if(t==20)
{
t=0;
if(min==0&&sec==0)
{
OUT=1;
}
if(sec==0)
{
sec=59;
min--;
}
else sec--;
if(state==1)
{ GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(5000); //想開機(jī)5秒后KV=0;沒整好。影響讀秒。
}
KV=0;
if(min==0&&sec<5)
{
KV=1;
SPEAKER=0;
delay(20);
SPEAKER=1;
}
if(min==0&&sec==0)
{
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
OUT=1;
state=3;
min=2;//回歸初始化
sec=0;
sec_ge=0; //秒的個位和十位
sec_shi=0;
min_ge=2; //分的個位和十位
while(1)
{
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(2);
GU=1;
SPEAKER=1;
delay(2);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0; SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(1);
GU=1;
SPEAKER=1;
delay(1);
GU=0;
SPEAKER=0;
delay(5);
GU=1;
SPEAKER=1;
delay(5);
GU=0;
SPEAKER=0;
delay(5);
GU=1;
SPEAKER=1;
delay(5);
GU=0;
SPEAKER=0;
delay(5);
GU=1;
SPEAKER=1;
delay(5);
GU=0;
delay(500);
}
}
}
}
sec_ge=sec%10; //秒的個位和十位
sec_shi=sec/10;
min_ge=min%10; //分的個位和十位
W1=0; //循環(huán)掃描
LED=tab[sec_ge];
delay(1);
W1=1;
W2=0;
LED=tab[sec_shi];
delay(1);
W2=1;
W3=0;
LED=tab[min_ge];
delay(1);
W3=1;
}
void display_pause()
{
W1=0; //循環(huán)掃描
LED=tab[sec_ge];
delay(1);
W1=1;
W2=0;
LED=tab[sec_shi];
delay(1);
W2=1;
W3=0;
LED=tab[min_ge];
delay(1);
W3=1;
}
void time_modify()
{ //修改位的閃爍狀態(tài)
if(TF1==1)
{
TF1=0;
blink=(blink+1)%2;
}
//修改具體哪個數(shù)碼管指示
if(time_shift==0)
{
delay(60);
if(time_shift==0)
flag=(flag+1)%3;
}
// 修改狀態(tài)下的數(shù)碼管顯示
switch(flag) //分支結(jié)構(gòu),根據(jù)flag的值來決定掃描狀態(tài)
{
case 0:
{
sec_ge=sec%10; //秒的個位和十位
sec_shi=sec/10;
min_ge=min%10; //分的個位和十位
min_shi=min/10;
W1=0; //循環(huán)掃描
LED=tab[sec_ge];
delay(1);
W1=1;
W2=0;
LED=tab[sec_shi];
delay(1);
W2=1;
if(blink==1)
{
W3=0;
LED=tab[min_ge];
delay(1);
W3=1;
}
break;
}
case 1:
{
sec_ge=sec%10; //秒的個位和十位
sec_shi=sec/10;
min_ge=min%10; //分的個位和十位
min_shi=min/10;
W1=0; //循環(huán)掃描
LED=tab[sec_ge];
delay(1);
W1=1;
if(blink==1)
{
W2=0;
LED=tab[sec_shi];
delay(1);
W2=1;
}
W3=0;
LED=tab[min_ge];
delay(1);
W3=1;
break;
}
case 2:
{
sec_ge=sec%10; //秒的個位和十位
sec_shi=sec/10;
min_ge=min%10; //分的個位和十位
min_shi=min/10;
if(blink==1)
{
W1=0; //循環(huán)掃描
LED=tab[sec_ge];
delay(1);
W1=1;
}
W2=0;
LED=tab[sec_shi];
delay(1);
W2=1;
W3=0;
LED=tab[min_ge];
delay(1);
W3=1;
break;
break;
}
default:break;
}
}
作者:
admin
時間:
2016-6-2 16:29
不會什么?是這個程序看不懂嗎?還是其他問題?
作者:
1123212
時間:
2016-6-2 16:42
計時開始OUT=0;后5秒KV=0;沒整好。開始后5秒KV=0;沒整好不會
作者:
ahshmj
時間:
2016-6-2 20:11
看程序好像是不會使用循環(huán)。
作者:
1123212
時間:
2016-6-2 21:10
主要問題是無法設(shè)定。計時開始5秒后kV為零。
作者:
luoluoluo136
時間:
2016-6-3 00:50
這程序我看得也是醉了。。。循環(huán)不會寫。。。先學(xué)一下基礎(chǔ)嘛。。。
作者:
1123212
時間:
2016-6-3 04:44
新的.rar
(114.04 KB, 下載次數(shù): 3)
2016-6-3 04:43 上傳
點擊文件名下載附件
作者:
1123212
時間:
2016-6-3 04:52
發(fā)了個工程和仿真文件,不會貼的,
作者:
電子小坑比
時間:
2016-6-3 07:36
沒有積分可以下載,急需資料啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1