楼主的主程序:
- #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); //调用按键驱动
- }
- }
- 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; //定时器计数频率
- tmp = (tmp * ms) / 1000; //计算所需的计数值
- tmp = 65536 - tmp; //计算定时器重载值
- tmp = tmp + 12; //补偿中断响应延时造成的误差
- T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
- T0RL = (unsigned char)tmp;
- TMOD &= 0xF0; //清零T0的控制位
- TMOD |= 0x01; //配置T0为模式1
- TH0 = T0RH; //加载T0重载值
- TL0 = T0RL;
- ET0 = 1; //使能T0中断
- TR0 = 1; //启动T0
- }
- /* T0中断服务函数,执行按键扫描 */
- void InterruptTimer0() interrupt 1
- {
- TH0 = T0RH; //重新加载重载值
- TL0 = T0RL;
- KeyScan(); //按键扫描
-
-
- }
复制代码 |