资讯详情

stc12单片机LED_PWM调光

本程序一共有3个文件下面分别列出: stc12c5a.h头文件下载:http://www.51hei.com/mcu/3282.html

main.c #include "stc12c5a.h" #include "type.h"

#define FRE 22118400 #define ME_FRE10000 //计时1/10000=0.0001s=0.1ms(此时间是用来加快LED闪烁频率) #define T0RELOAD(65536 - (FRE / TIME_FRE))

//***************************************初始化变量 volatile U32 S_TIME = 0; volatile U32 LED_PWM = 0;

//*****************************************延时函数 void delay(U32 dly) { U32 i; while(--dly > 0) { for(i=0;i++;i<1000000); } }

//****************************************定时器0初始化函数 void Timer0_Init() { TMOD &= 0XF0; TMOD |= 0X01;//定时器0的16位计数方式 TH0 = T0RELOAD / 256; TL0 = T0RELOAD % 256; AUXR |= 0X80;// 0时钟为Fosc,即1T PT0 = 1;// 定时器0优先级控制位, 1 为高优先级 0 为低优先级 EA = 1;//开总中断 ET0 = 1;//开定时器0中断 TR0 = 1;//启动定时器0 }

//*****************************************主函数 void main() { Timer0_Init(); //以下根据实际情况修改程序 while(1) { P33 = 1; if(P33 == 0)// KEY1 { delay(5000); if(P33 == 0) { LED_PWM = 0;// 熄灭LED } } P34 = 1; if(P34 == 0)// KEY2 按键一直按着,KED逐渐变亮 { delay(5000); if(P34 == 0) { if(LED_PWM < 100) LED_PWM ++; } } P35 = 1; if(P35 == 0)// KEY3 按键一直按着,KED逐渐变暗 { delay(5000); if(P35 == 0) { if(LED_PWM >0) LED_PWM --; } } }

} //*****************************************定时器0中断 void Timer0_Routine() interrupt 1 { TH0 = T0RELOAD / 256; TL0 = T0RELOAD % 256; //以下根据实际情况修改程序 SYS_TIME ++; if(SYS_TIME < LED_PWM) { P0 = 0;//点亮LED } else { P0 = 0XFF;//关闭LED } if(SYS_TIME > 100) {SYS_TIME = 0;}

}

type.h #ifndef _TYPE_H_ #define _TYPE_H_

typedef unsigned char U8; typedef signed char S8; typedef unsigned int U16; typedef signed int S16; typedef unsigned long U32; typedef signed long S32;

#endif

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台