- #include "stc8h.h"
- #include "intrins.h"
- #include "display.h"
- #include "key.h"
-
- #define Key P32 //按键定义在P32
- #define PWM_T 1000 //设置周期值
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long u32;
-
- void Update();
- void Timer0_Init(void);
- u16 duty=950;
-
-
- void main()
- {
- P_SW2|=0x80; // 使能访问扩展寄存器
- P1M0 |= 0x03; P1M1 &= ~0x03; // 配置P10、p11为推挽输出模式
- PWMA_PS|=0x00; // 设置PWMA通道1p为p10,1n为p11
- PWMA_CCER1|=0x00; // 关闭通道1
- PWMA_CCMR1|=0x68; // 配置通道1的输出模式;
- PWMA_CCER1|=0x0f; // 打开通道1,设置1p、1n
- PWMA_ARRH=(u8)(PWM_T>>8); // 写自动重装寄存器高8位
- PWMA_ARRL=(u8)(PWM_T); // 写自动重装寄存器低8位
- PWMA_ENO|= 0x03; // 打开1p、1n输出
- PWMA_BKR|= 0x80; // 打开主输出
- PWMA_CR1|= 0x01; // 开始计数
-
- P3M0 &= ~0x04; P3M1 &= ~0x04; //p32设为标准io
- P3PU |= 0x04; //p32打开上拉电阻
-
- Timer0_Init() ;
- EA=1;
- P32=1;
-
- while(1)
- {
- Update();
- w1=duty/100;
- w2=duty/10%10;
- w3=keymod;
- w4=P32;
- display();
- keyscan();
-
- };
- }
- void keypro()
- {
- if(keymod==1)
- {
- duty+=10;
- if(duty>1000)duty=1000;
- keymod=0;
- }
- if(keymod==2)
- {
- duty-=10;
- if(duty<=700)duty=700;
- keymod=0;
- }
- }
- void Update()
- {
- PWMA_CCR1H=(u8)(duty>>8);
- PWMA_CCR1L=(u8)(duty);
- }
- void Timer0_Isr(void) interrupt 1
- {
- dc++;
- keycount++;
- if(keycount>60000)keycount=0;
- }
-
- void Timer0_Init(void) //1毫秒@11.0592MHz
- {
- AUXR |= 0x80; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TL0 = 0xCD; //设置定时初始值
- TH0 = 0xD4; //设置定时初始值
- TF0 = 0; //清除TF0标志
- TR0 = 1; //定时器0开始计时
- ET0 = 1; //使能定时器0中断
- }
复制代码
|