PIC單片機C語言程序設(shè)計(6)-基礎(chǔ)電子_第1頁
PIC單片機C語言程序設(shè)計(6)-基礎(chǔ)電子_第2頁
PIC單片機C語言程序設(shè)計(6)-基礎(chǔ)電子_第3頁
PIC單片機C語言程序設(shè)計(6)-基礎(chǔ)電子_第4頁
PIC單片機C語言程序設(shè)計(6)-基礎(chǔ)電子_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

精品文檔-下載后可編輯PIC單片機C語言程序設(shè)計(6)-基礎(chǔ)電子(接上期)/data/html/2022-9-13/98357.html

4.可預(yù)置起始時刻的倒計時程序

在2022年第2期《PIC單片機C語言程序(5)》一文中,我們介紹了可預(yù)置起始時刻的時鐘的硬件電路并給出了C語言程序。下面要介紹的可預(yù)置起始時刻的倒計時程序,是作為日常生活中對某事件的定時之用:只要某事件由人工設(shè)置的計時時間到,倒計時電路便會發(fā)出報警聲。倒計時的特點是,計時一旦達到預(yù)定值,其值就歸零。利用歸零條件,即可實現(xiàn)任意倒計時達到時的報警功能,提示人們定時已到。

本倒計時器可在0~99分鐘內(nèi)任意設(shè)置計時值。

例如在廚房中,蒸大米飯(8兩米),定時33分鐘,燒開水(一壺)為20分鐘,煮胡羅卜(紅色)為30分鐘等,只要設(shè)定時間一到,倒計時器即報警,使用十分方便。當然,上述倒計時值,均是事先用普通時鐘確定每個事件所要花費的時間,列出相應(yīng)定時標準,才能用倒記時器進行定時。

(1)硬件電路。

圖6是0~99分鐘可預(yù)置的倒計時電路。

PIC16F84A單片機④腳為手動復(fù)位端,外接R1、D0、C6、K0(微動開關(guān))組成復(fù)位電路;③腳RA4外接上電阻R2和倒計時人工預(yù)置開關(guān)K1;⒄腳RAO外接R0、V3和蜂鳴器,組成倒計時值達到(歸零)時的自動報警信號。電路中的兩位LED數(shù)碼管和V1、V2組成0~99分鐘可預(yù)置LED數(shù)碼顯示電路,其電路原理與2022年第12期《PIC單片機C語言程序(3)》一文中圖3的起始兩位計數(shù)電路相似。

(2)程序流程圖。

圖7、圖8、圖9分別為0~99分鐘可預(yù)置的倒計時程序的主程序、顯示函數(shù)和鍵值掃描程序流程圖。通過流程圖,讀者可以加深對于倒計時程序設(shè)計原理和對2022年第2期《PIC單片機C語言程序(5)》一文中可預(yù)置時鐘電路程序的理解。

圖7倒計定時主程序流程圖

圖8倒計時顯示函數(shù)流程圖

圖9倒計時鍵值掃描流程圖

(3)倒計時的C程序。

根據(jù)圖7~圖9編寫的的倒計時C程序(命名為pic06.c)清單如下:

#includepic.h

#definePORTAIT(add,bit)((unsigned)(add)*8+(bit))

staticbitPORTA_0@PORTAIT(PORTA,0);

//pic16F84A

staticbitPORTA_1@PORTAIT(PORTA,1);

staticbitPORTA_2@PORTAIT(PORTA,2);

//A口的位定義

staticbitPORTA_3@PORTAIT(PORTA,3);

staticbitPORTA_4@PORTAIT(PORTA,4);

unsignedintttr=0;

//無符號整形變量ttr,并賦值0

unsignedcharx=0,sign_a=0;

//字符變量X,標志位并賦值0

voidkey_server();//鍵值服務(wù)函數(shù)

voiddisplay(unsignedintx);

//帶形參X的顯示函數(shù)

voiddisplay_set(unsignedintx);

//帶形參X的鍵值顯示函數(shù)

voiddelay_1m();//按鍵延時函數(shù)

voiddelay(unsignedlongintk)//延時函數(shù)

{

unsignedlonginti;//無符號整形變量i

for(i=0;i=k;i++)//for語句

continue;//繼續(xù)循環(huán)

}

voiddisplay(unsignedintx)//顯示函數(shù)開始

{

unsignedintd=5800,unit_bit,ten_bit,

//整型變量d并賦值,個、十位

unsignedcharSEG7[10]={0xc0,0xf9,0xa4,

0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//引用數(shù)組字符段碼

unit_bit=x%10;//picc編譯器可識別的個位

ten_bit=x/10%10;//picc可識別的十位

while(d0)//while語句

{

PORTA|=0x1E;//關(guān)顯示

PORTB=SEG7[unit_bit];

//個位字段碼送B口

RA3=0;//顯示個位

delay(200);//延時以便觀察

RA3=1;//關(guān)個位顯示

delay(2);//延時

PORTB=SEG7[ten_bit];

//十位字段碼送B口

RA2=0;//顯示十位

delay(200);//延時以便觀察

RA2=1;//關(guān)十位顯示

delay(2);//延時

d--;//d從5800開始自減量

if(PORTA_4==0)//K1未按下

{

while(1)//執(zhí)行while語句

{

if(PORTA_4==1)//K1按下,執(zhí)行以下程序

{

sign_a=1;

x=0;

d=0;

RA0=0;

break;//跳出循環(huán)

}

}

}

}

}

voidmain()//主程序開始

{

TRISB=0x00;

//16F84A口初始化,B為輸入

TRISA=0x10;//A4輸入,其余輸出

PORTB=0xFF;

INTCON=0x00;

PORTA=0xFF;關(guān)顯示

RA0=0;關(guān)報警

x=0;//給整型變量X賦值0

while(1)//while循環(huán)語句開始

{

while(x0)

{

display(x);//調(diào)顯示函數(shù)

key_server();//調(diào)鍵值服務(wù)函數(shù)

x--;//分自減量(倒計時)

}

if(x==0)//如果X=0

RA0=1;//RA0賦值1(報警信號)

display_set(x);//調(diào)鍵值顯示函數(shù)

key_server();//調(diào)鍵值服務(wù)函數(shù)

}

}

voidkey_server()//鍵值服務(wù)程序開始

{

unsignedintvalue=0;//給存儲顯示值賦0

display_set(x);//調(diào)鍵值顯示函數(shù)

if(PORTA_4==0)//如果RA4為0

{

while(1)

{

x++;//鍵值X自增

if(x99)//如果鍵值X99

x=0;//給X賦值0

display_set(x);//調(diào)鍵值顯示函數(shù)

delay_1m();//按鍵延時,以便觀察

if(PORTA_4==1)//如果RA4為高電平

{

sign_a=0;//清零設(shè)定時間標志位

RA0=0;//給RA0賦值0

break;//跳出循環(huán)返回

}

}

}

}

voiddisplay_set(unsignedintx)

//鍵值顯示函數(shù)開始

{

unsignedintd=20,unit_bit,ten_bit,unsignedcharSEG7[10]={0xc0,0xf9,0xa4,

0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unit_bit=x%10;

//這里的解釋與display的函數(shù)相似

ten_bit=x/10%10;

while(d0)

{

PORTA=0x1e;

PORTB=SEG7[unit_bit];

RA3=0;//顯示個位

delay(200);

RA3=1;

delay(2);

PORTB=SEG7[ten_bit];

RA2=0;//顯示十位

delay(200);

RA2=1;

delay(2);

d--;

}

}

voiddelay_1m()

//按鍵(圖6的K1)延時函數(shù)開始

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論