本程序一共有3個文件下面分別列出:
stc12c5a.h 頭文件下載:http://www.zg4o1577.cn/mcu/3282.html
main.c
#include "stc12c5a.h"
#include "type.h"
#define FRE 22118400
#define TIME_FRE 10000 //計時1/10000=0.0001s=0.1ms (此時間是用來加快LED閃爍頻率)
#define T0RELOAD (65536 - (FRE / TIME_FRE))
//***************************************初始化變量
volatile U32 SYS_TIME = 0;
volatile U32 LED_PWM = 0;
//*****************************************延時函數(shù)
void delay(U32 dly)
{
U32 i;
while(--dly > 0)
{
for(i=0;i++;i<1000000);
}
}
//****************************************定時器0初始化函數(shù)
void Timer0_Init()
{
TMOD &= 0XF0;
TMOD |= 0X01; //定時器0的16位計數(shù)方式
TH0 = T0RELOAD / 256;
TL0 = T0RELOAD % 256;
AUXR |= 0X80; // 計數(shù)器0時鐘為Fosc,即1T
PT0 = 1; // 定時器0優(yōu)先級控制位, 1 為高優(yōu)先級 0 為低優(yōu)先級
EA = 1; //開總中斷
ET0 = 1; //開定時器0中斷
TR0 = 1; //啟動定時器0
}
//*****************************************主函數(shù)
void main()
{
Timer0_Init();
//以下根據(jù)實際情況修改程序
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;
//以下根據(jù)實際情況修改程序
SYS_TIME ++;
if(SYS_TIME < LED_PWM)
{
P0 = 0; //點亮LED
}
else
{
P0 = 0XFF; //關(guān)閉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