你應該貼這個給人家看。
- #define SOFTIIC_SCL P1_0
- #define SOFTIIC_SCL_OUT {P1M1|=0x01;P1M0|=0x01;}//P1_0開漏輸出
- #define SOFTIIC_SDA P1_1
- #define SOFTIIC_SDA_IN {P1M1|=0x02;P1M0&=~0x02;}//P1_1高阻輸入
- #define SOFTIIC_SDA_OUT {P1M1|=0x02;P1M0|=0x02;}//P1_1開漏輸出
- #include <STC8HX.h>
- uint32 sys_clk = 24000000;//設置PWM、定時器、串口、EEPROM頻率參數
- #include "mylib/TM1650.h"
- #include "lib/delay.h"
- uint8 shi = 23;
- uint8 fen = 59;
- uint8 miao = 50;
- uint8 lj_50ms = 0;
- void diaplay();
- void Timer0Init(void) //2566微秒@24.000MHz
- {
- AUXR &= 0x7f; //定時器時鐘12T模式
- TMOD &= 0xf0; //設置定時器模式
- TL0 = 0xf4; //設定定時初值
- TH0 = 0xeb; //設定定時初值
- }
- /*描述該功能...
- */
- void diaplay(){
- TM1650_displayBit(fen % 10,1,0);
- TM1650_displayBit(fen / 10,2,0);
- TM1650_displayBit(shi % 10,3,1);
- TM1650_displayBit(shi / 10,4,0);
- }
- void T_IRQ0(void) interrupt 1 using 1{
- lj_50ms--;if(lj_50ms == 0){
- miao++;if(miao >= 60){
- fen++;miao = 0;
- if(fen >= 60){
- shi++;miao = 0;
- fen = 0;
- if(shi >= 24){
- delay(160000);
- miao = 0;
- fen = 0;
- shi = 0;
- }
- }
- }
- }
- }
- void setup()
- {
- TM1650_Init();//TM1650初始化
- Timer0Init();
- EA = 1; // 控制總中斷
- ET0 = 1; // 控制定時器中斷
- TR0 = 1;// 定時器0開始計時
- P3M1&=~0x08;P3M0|=0x08;//推挽輸出
- P3M1&=~0x04;P3M0|=0x04;//推挽輸出
- P3M1&=~0x80;P3M0|=0x80;//推挽輸出
- }
- void loop()
- {
- diaplay();
- if(P3_2 == 0){
- if(fen <= 58){
- fen = fen + 1;
- delay(150);
- }
- else{
- fen = 0;
- }
- }
- if(P3_3 == 0){
- if(shi <= 23){
- shi = shi + 1;
- delay(150);
- }
- else{
- shi = 0;
- }
- }
- if((P3_3 == 0) && (P3_2 == 0)){
- miao = 0;
- }
- }
- void main(void)
- {
- setup();
- while(1){
- loop();
- }
- }
復制代碼
為什么定時器是設置成這樣?
2566微秒@24.000MHz
|