|
- #include <stc8.h>
- #include "hc595.h"
- #include "pwm.h"
- #define CYCLE 100 // 设置PWM周期为1000H个PWM时钟
- unsigned char table[] = {90,70,50,30,10};// 定义5个档位的占空比
- sbit keyContrl = P0^7; // 独立按键总开关
- sbit key1 = P0^0; // 独立按键1
- void Delay(unsigned int xms) // 毫秒级延时
- {
- unsigned int i, j;
- for(i=xms;i>0;i--)
- {
- for(j=921;j>0;j--);
- }
- }
- void main()
- {
- unsigned char i = 0;
- P_SW2 = 0x80;
- PWMCKS = 0x00; // PWM时钟为系统时钟
- PWMC = CYCLE; // 设置PWM周期为CYCLE个PWM时钟
- PWM5T1= 0; // 在计数值为0时,开始输出低电平
- PWM5T2= 0; // 在计数值为0时,开始输出高电平
- PWM5CR= 0x88; // 使能PWM5_2输出
- P_SW2 = 0x00;
- PWMCR = 0x80; // 启动PWM模块
- keyContrl = 0;
- while (1)
- {
- if(!key1) // 独立按键1,被按下
- {
- Delay(10); // 延时消抖
- if(!key1)
- {
- i++; // 档位增加1
- if(i>4) // 大于最大档位后,归零
- {
- i = 0;
- }
- }
- while(!key1); // 等待按键抬起
- }
- PWM5T2= table[i]; // 把i档位的占空比赋给PWM5T2
-
- // 访问逻辑地址位于XDATA区域的特殊功能寄存器前需要
- // 将 P_SW2(BAH)寄存器的最高位(EAXFR)置 1
- P_SW2 |= 0x80;
-
- display(0,i); // 显示档位(0~4,共5个档位)
- }
- }
复制代码 |
|