/**************************************************** 4个按键决定4个亮度
占空比 :PWM_T/100,越大越亮
****************************************************/ #include
#define uInt unsigned int #define uchar unsigned char
uchar PWM_T = 0; //占空比控制变量
//4个按键,决定输出PWM_T值 sbit KEY_4_PIN=P3^5; sbit KEY_3_PIN=P3^4; sbit KEY_2_PIN=P3^3; sbit KEY_1_PIN=P3^2;
/**************************************************** 延时子程序
****************************************************/ void delay_ms(unsigned char ms) {
unsigned int i; do{ i = 11059200L / 13000; while(--i) ; //14T per loop }while(--ms); }
/**************************************************** 主程序
****************************************************/ void main(void) { uchar led_bh,led_fx=1; uInt n ; TMOD=0x02; //定时器0,工作模式2,8位定时模式 TH0=210; //写入预置初值(取值1-255,数越大PWM频率越高) TL0=210; //写入预置值 (取值1-255,数越大PWM频率越高) TR0=1; //启动定时器 ET0=1; //允许定时器0中断 EA=1; //允许总中断 P1=0xff; //初始化P1,输出端口 P0=0xff; //初始化P0
while(1) //PWM周期100,高电平100- PWM_T, 低电平PWM_T,低电平工作 { for(n=0;n<200;n++); //延时,取值0-65535,数字越大变化越慢 if(!KEY_4_PIN||!KEY_3_PIN||!KEY_2_PIN||!KEY_1_PIN) //通过按键改变占空比 { //这些值可以改变
if(!KEY_4_PIN) { while(1) { delay_ms(10); if(led_fx==1) led_bh++; else { led_bh--; } if(led_bh>100) led_fx=0; if(led_bh==0) led_fx=1; PWM_T=led_bh; if(!KEY_3_PIN) break ; if(!KEY_2_PIN) break ; if(!KEY_1_PIN) break ; } } else if(!KEY_3_PIN) PWM_T=0; else if(!KEY_2_PIN) PWM_T=50; else if(!KEY_1_PIN) PWM_T=100; } } }
/**************************************************** /定时器0中断模拟PWM
****************************************************/ timer0() interrupt 1 using 2 {
static uchar t ; //PWM计数 t++; //每次定时器溢出加1
if(t==100) //PWM周期 100个单位 {
t=0; //使t=0,开始新的PWM周期 //P1=0x00; //使LED灯亮 ,输出端口 P0=0x00; //使LED灯亮 ,输出端口 }
if(PWM_T==t) //按照当前占空比切换输出为高电平 { //P1=0xff; //使LED灯灭
P0=0xff; //使LED灯灭 } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //包含本头文件后,不用另外再包含\//stc15fxx.h //
//内核特殊功能寄存器 // 复位值 描述
sfr ACC = 0xE0; //0000,0000 累加器Accumulator sfr B = 0xF0; //0000,0000 B寄存器 sfr PSW = 0xD0; //0000,0000 程序状态字 sbit CY = PSW^7; sbit AC = PSW^6; sbit F0 = PSW^5; sbit RS1 = PSW^4; sbit RS0 = PSW^3; sbit OV = PSW^2; sbit P = PSW^0;
sfr SP = 0x81; //0000,0111 堆栈指针
sfr DPL = 0x82; //0000,0000 数据指针低字节 sfr DPH = 0x83; //0000,0000 数据指针高字节
//I/O 口特殊功能寄存器
sfr P0 = 0x80; //1111,1111 端口0 sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit P03 = P0^3; sbit P04 = P0^4; sbit P05 = P0^5; sbit P06 = P0^6; sbit P07 = P0^7;
sfr P1 = 0x90; //1111,1111 端口1 sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit P14 = P1^4; sbit P15 = P1^5; sbit P16 = P1^6; sbit P17 = P1^7;
sfr P2 = 0xA0; //1111,1111 端口2 sbit P20 = P2^0; sbit P21 = P2^1; sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4;
sbit P25 = P2^5; sbit P26 = P2^6; sbit P27 = P2^7;
sfr P3 = 0xB0; //1111,1111 端口3 sbit P30 = P3^0; sbit P31 = P3^1;
sbit P32 = P3^2;//按键 sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = sbit P36 = sbit P37 = sfr P4 = sbit P40 = sbit P41 = sbit P42 = sbit P43 = sbit P44 = sbit P45 = sbit P46 = sbit P47 = sfr P5 = sbit P50 = sbit P51 = sbit P52 = sbit P53 = sbit P54 = sbit P55 = sbit P56 = sbit P57 = sfr P6 = sbit P60 = sbit P61 = sbit P62 = sbit P63 = sbit P64 = sbit P65 = sbit P66 = sbit P67 = sfr P7 = sbit P70 = sbit P71 = sbit P72 = sbit P73 = sbit P74 = sbit P75 = P3^5; P3^6; P3^7;
0xC0; //1111,1111 端口4 P4^0; P4^1; P4^2; P4^3; P4^4; P4^5; P4^6; P4^7;
0xC8; //xxxx,1111 端口5 P5^0; P5^1; P5^2; P5^3; P5^4; P5^5; P5^6; P5^7;
0xE8; //0000,0000 端口6 P6^0; P6^1; P6^2; P6^3; P6^4; P6^5; P6^6; P6^7;
0xF8; //0000,0000 端口7 P7^0; P7^1; P7^2; P7^3; P7^4; P7^5;
sbit P76 = P7^6; sbit P77 = P7^7;
sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0 sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1 sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0 sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1 sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0 sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1 sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0 sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1 sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0 sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1 sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0 sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1 sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0 sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1 sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0 sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
//系统管理特殊功能寄存器
sfr PCON = 0x87; //0001,0000 电源控制寄存器 sfr AUXR = 0x8E; //0000,0000 辅助寄存器 sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1 sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器 sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器 sfr P_SW2 = 0xBA; //xxxx,x000 外设端口切换寄存器
//中断特殊功能寄存器
sfr IE = 0xA8; //0000,0000 中断控制寄存器 sbit EA = IE^7; sbit ELVD = IE^6; sbit EADC = IE^5; sbit ES = IE^4; sbit ET1 = IE^3; sbit EX1 = IE^2; sbit ET0 = IE^1; sbit EX0 = IE^0;
sfr IP = 0xB8; //0000,0000 中断优先级寄存器 sbit PPCA = IP^7; sbit PLVD = IP^6; sbit PADC = IP^5; sbit PS = IP^4; sbit PT1 = IP^3; sbit PX1 = IP^2;