- 註冊時間
- 2014-12-14
- 最後登錄
- 2023-3-17
- 主題
- 查看
- 積分
- 20
- 閱讀權限
- 20
- 文章
- 14
- 相冊
- 0
- 日誌
- 0
狀態︰
離線
|
本帖最後由 NICEPLAY1 於 2016-2-24 22:37 編輯
我想學一個使用C語言顯示碼錶功能的程式
有小時.分鐘..秒鐘.毫秒 目前希望能夠讓他在23:59:59:99時停止
並且要利用紅外線感應來控制開始及暫停
使用的IC是8951
七段顯示器的LED端接在P0.0~P0.7 掃描端接在P2
由兩個四合一七段組成
以下是我目前的程式
#include<reg51.h >
code char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x27,0x7f,0x67}; //0~9的字型碼
code char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
char time=0;
char cnt,hour,min,sec,ms,index,disp[8];
// 顯示副程式
void display(void)
{ disp[0]=tab[hour10]; // 放小時鐘的拾位數
disp[1]=tab[hour%10]; //放小時鐘的個位數
disp[2]=tab[min10]; //放分鐘的拾位數
disp[3]=tab[min%10]; //放分鐘的個位數
disp[4]=tab[sec10];
disp[5]=tab[sec%10];
disp[6]=tab[ms10];
disp[7]=tab[ms%10];
}
//T0 計時中斷的副程式
void timer0 (void) interrupt 1
{ TH0=(65536-1000)256; // TH0存放商數
TL0=(65536-1000)%256; // TL0存放餘數
P2=0xff; // 顯示器不亮
P0=~disp[index]; //顯示的字型碼由P1輸出
P2=~com[index]; //顯示器的掃描碼由P0輸出
index++;if(index=8) index=0; //輪流掃描顯示器
}
//T1 計時中斷的副程式
void timer1 (void) interrupt 3
{ TH1=(65536-10000)256; // TH1存放商數
TL1=(65536-10000)%256; // TL1存放餘數
cnt++; // 計數變數(cnt)加 1
if(cnt=0.01)
{cnt=0;ms++;}
if(ms=99)
{ ms=0;sec++;}
if(sec=59)
{ sec=0;min++;}
if(min=59)
{ min=0;hour++;}
if(hour=23)
{hour=TR1;}
display(); } // 呼叫顯示副程式
//主程式
main( )
{ IE=0x8A; // 開啟Timer 0,1 計時計數中斷
TMOD=0x11; // T0,T1的工作模式為1(16 bits)
TR0=TR1=1; // 啟動Timer 0 ,Timer 1
while(1){
for(ms=0;ms=99;cnt++)
display(); } } // 呼叫顯示副程式 |
|