名稱 數位管顯示 按鍵控制秒表 論壇 編寫 shifang 日期 2009 5 修改 無 内容 中斷按鍵控制 數位管顯示 中斷 0 控制計時和停止 中斷 1 清零 include 包含頭檔案 一般情況不需要改動 頭檔案包含特殊功能寄存器的定義 unsigned int msecond second 定義全局變量 bit GoFlag 定義停止 計時标志 define DataPort P0 定義資料端口 程式中遇到 DataPort 則用 P0 替換 sbit LATCH1 P2 2 定義鎖存使能端口 段鎖存 sbit LATCH2 P2 3 位鎖存 unsigned char code dofly DuanMa 10 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 顯示段碼值 0 9 unsigned char code dofly WeiMa 0 xfe 0 xfd 0 xfb 0 xf7 0 xef 0 xdf 0 xbf 0 x7f 分别對應相應 的數位管點亮 即位碼 unsigned char TempData 8 存儲顯示值的全局變量 void DelayUs2x unsigned char t 函數聲明 void DelayMs unsigned char t void Display unsigned char FirstBit unsigned char Num void Init Timer0 void void CLR void 主函數 void main void unsigned char num 0 EX0 1 外部中斷 0 開 IT0 1 IT1 0 表示邊沿觸發 EX1 1 外部中斷 1 開 IT1 1 IT1 1 表示邊沿觸發 Init Timer0 while 1 主循環 TempData 0 dofly DuanMa second 10 分解顯示資訊 如要顯示 68 則 68 10 6 68 10 8 TempData 1 dofly DuanMa second 10 TempData 2 0 x40 TempData 3 dofly DuanMa msecond 10 分解顯示資訊 如要顯示 68 則 68 10 6 68 10 8 TempData 4 dofly DuanMa msecond 10 主循環中添加其他需要一直工作的程式 顯示函數 用于動态掃描數位管 輸入參數 FirstBit 表示需要顯示的第一位 如指派 2 表示從第三個數位管開始顯示 如輸入 0 表示從第一個顯示 Num 表示需要顯示的位數 如需要顯示 99 兩位數值則該值輸入 2 void Display unsigned char FirstBit unsigned char Num static unsigned char i 0 DataPort 0 清空資料 防止有交替重影 LATCH1 1 段鎖存 LATCH1 0 DataPort dofly WeiMa i FirstBit 取位碼 LATCH2 1 位鎖存 LATCH2 0 DataPort TempData i 取顯示資料 段碼 LATCH1 1 段鎖存 LATCH1 0 i if i Num i 0 定時器初始化子程式 void Init Timer0 void TMOD 0 x01 使用模式 1 16 位定時器 使用 符号可以在使用多個定時器時不 受影響 TH0 0 x00 給定初值 TL0 0 x00 EA 1 總中斷打開 ET0 1 定時器中斷打開 TR0 1 定時器開關打開 定時器中斷子程式 void Timer0 isr void interrupt 1 static unsigned char num TH0 65536 2000 256 重新指派 2ms TL0 65536 2000 256 Display 0 8 if GoFlag num if num 5 num 0 msecond if msecond 100 100 進 1 msecond 0 second 秒加 1 if second 100 second 0 外部中斷 0 程式 void ISR INT0 void interrupt 0 GoFlag GoFlag 利用外部中斷打開和關閉定時标志 用于開始和停止計時 外部中斷 1 程式 void ISR INT1 void interrupt 2 if GoFlag 0 停止時才可以清零 CLR 數值清零 void CLR void second 0 利用外部中斷清零 msecond 0
展開閱讀全文