PIC單片機(jī)C語言程序設(shè)計(jì)(6)
(3)倒計(jì)時的C 程序。
根據(jù)圖7~ 圖9 編寫的的倒計(jì)時C 程序(命名為pic06.c)清單如下:
#includepic.h>
#define PORTAIT(add,bit)((unsigned)(add)*8+(bit))
static bit PORTA_0 @PORTAIT(PORTA,0);
//pic16F84A
static bit PORTA_1 @PORTAIT(PORTA,1);
static bit PORTA_2 @PORTAIT(PORTA,2);
//A 口的位定義
static bit PORTA_3 @PORTAIT(PORTA,3);
static bit PORTA_4 @PORTAIT(PORTA,4);
unsigned int ttr=0;
// 無符號整形變量ttr,并賦值0
unsigned char x=0,sign_a=0;
// 字符變量X,標(biāo)志位并賦值0
void key_server(); // 鍵值服務(wù)函數(shù)
void display(unsigned int x);
// 帶形參X 的顯示函數(shù)
void display_set(unsigned int x);
// 帶形參X 的鍵值顯示函數(shù)
void delay_1m(); // 按鍵延時函數(shù)
void delay(unsigned long int k ) // 延時函數(shù)
{
unsigned long int i; // 無符號整形變量i
for(i=0;i=k;i++) // for 語句
continue; // 繼續(xù)循環(huán)
}
void display(unsigned int x) // 顯示函數(shù)開始
{
unsigned int d=5800,unit_bit,ten_bit,
// 整型變量d 并賦值,個、十位
unsigned char SEG7[10]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
// 引用數(shù)組字符段碼
unit_bit=x%10; //picc 編譯器可識別的個位
ten_bit=x/10%10; // picc 可識別的十位
while(d>0) // 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)
}
}
}
}
}
void main( ) // 主程序開始
{
TRISB=0x00;
// 16F84A 口初始化,B 為輸入
TRISA=0x10; // A4 輸入,其余輸出
PORTB=0xFF;
INTCON=0x00;
PORTA=0xFF; 關(guān)顯示
RA0=0; 關(guān)報警
x=0; // 給整型變量X 賦值0
評論