樓主的主程序:
- #include "reg52.h"
- #include "oled.h"
- sbit led = P1^0;
- unsigned char step = 0;
- unsigned char oprt = 0;
- unsigned char xuhao = 0;
- signed long num1 = 0;
- signed long num2 = 0;
- signed long result = 0;
- unsigned char T0RH = 0;
- unsigned char T0RL = 0;
- void ConfigTimer0(unsigned int ms);
- extern void KeyScan();
- extern void KeyDriver(unsigned char xuhao);
- void jia();
- void jian();
- void jian()
- {
- if(xuhao==0)
- xuhao=2;
- else
- xuhao--;
- led = ~led;
- }
- void jia()
- {
- if(xuhao<2)
- xuhao++;
- else
- xuhao=0;
- led = ~led;
- }
- void main(void)
- { u8 t;
- EA = 1; //開總中斷
- ConfigTimer0(1); //配置T0定時1ms
- OLED_Init(); //初始化OLED
- OLED_Clear() ;
- t=' ';
- led =1;
- while(1)
- {
- KeyDriver(xuhao); //調(diào)用按鍵驅(qū)動
- }
- }
- void Reset()
- {
- num1 = 0;
- num2 = 0;
- step = 0;
- OLED_Clear();
- OLED_ShowString(5,0,"1.",16);
- OLED_ShowCHinese(18,0,0);//
- OLED_ShowCHinese(36,0,1);//
- OLED_ShowCHinese(54,0,2);
- OLED_ShowCHinese(72,0,3);
- OLED_ShowString(5,2,"2.",16);
- OLED_ShowCHinese1(18,2,0);
- OLED_ShowCHinese1(36,2,1);
- OLED_ShowCHinese1(54,2,2);
- OLED_ShowCHinese1(72,2,3);
- OLED_ShowString(5,4,"3.",16);
- OLED_ShowCHinese1(18,4,0);
- OLED_ShowCHinese1(36,4,1);
- OLED_ShowCHinese1(54,4,2);
- OLED_ShowCHinese1(72,4,3);
- delay_ms(8000);
- }
- void OprtKeyAction(unsigned char type)
- {
- switch(type)
- {
- case 0: jian(); break;
- case 1: jia(); break;
- default: break;
- }
- }
- void ConfigTimer0(unsigned int ms)
- {
- unsigned long tmp; //臨時變量
-
- tmp = 11059200 / 12; //定時器計數(shù)頻率
- tmp = (tmp * ms) / 1000; //計算所需的計數(shù)值
- tmp = 65536 - tmp; //計算定時器重載值
- tmp = tmp + 12; //補償中斷響應(yīng)延時造成的誤差
- T0RH = (unsigned char)(tmp>>8); //定時器重載值拆分為高低字節(jié)
- T0RL = (unsigned char)tmp;
- TMOD &= 0xF0; //清零T0的控制位
- TMOD |= 0x01; //配置T0為模式1
- TH0 = T0RH; //加載T0重載值
- TL0 = T0RL;
- ET0 = 1; //使能T0中斷
- TR0 = 1; //啟動T0
- }
- /* T0中斷服務(wù)函數(shù),執(zhí)行按鍵掃描 */
- void InterruptTimer0() interrupt 1
- {
- TH0 = T0RH; //重新加載重載值
- TL0 = T0RL;
- KeyScan(); //按鍵掃描
-
-
- }
復(fù)制代碼 |