|
#include<reg52.h>
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit pwm1= P2^7; //引腳位定義
unsigned int target =6,percent = 0; //聲明target 目標 = 6,percent 百分百 = 0
void Timer0Initial(); //定時器0 TH0 TL0初始賦值函數
void initial_Timer(); //定時器0初始化配置函數
void delay(unsigned int x); //1ms延時函數
void keyscan(); //按鍵函數
void initial(); //系統初始化函數
void Timer0();//定時器0 中斷服務程序
void main() //主函數
{
initial(); //系統初始化
while(1)
{
keyscan(); //按鍵處理函數
}
}
void keyscan() //按鍵處理函數
{
if(key1 == 0) //按鍵1是否按下
{
delay(3); //延時3ms
if(key1 == 0)
{
if(target >= 7) //target 是否大于等于 7
{
target -= 1; //target - 1
}
while(key1 == 0) //按鍵1按下
{P1 = 0x00;}
}
P1 = 0xFF;
}
if(key2 == 0)
{
delay(3);
if(key2 == 0)
{
if(target <= 26) //target 是否小于等于 26
{
target += 1; //target + 1
}
while(key2 == 0)
{P1 = 0x00;}
}
P1 = 0xFF;
}
}
void initial() //系統初始化函數
{
key1 = 1;
key2 = 1;
P1 = 0xff;
initial_Timer(); //定時器0 初始化
}
/*使用11.0592mhz晶振
92次計時為100us
void Timer0Initial() //定時器0 高八位 低八位 初始賦值
{
TH0 = (65536-92)/256;
TL0 = (65536-92)%256;
} //該初值使每0.1ms產生一次中斷
void initial_Timer() //定時器中斷0 初始化
{
EA = 1;
ET0 = 1;
TMOD = 0x01;
Timer0Initial();
TR0 = 1;
}
void delay(unsigned int x) //1ms延時函數
{
unsigned int i,j;
for(i = 0;i< x; ++i)
for(j = 120; j >0 ; --j)
;
}
void Timer0() interrupt 1 using 0 //定時器0 中斷服務程序
{
percent += 1; //per + 1
if(percent == 200) //per 是否等于 200
{
percent = 0; //per = 0
pwm1 = 1; //信號線輸出高電平
}
if(percent == target) //par 是否等于 tar
{
pwm1 = 0; //信號線輸出低電平
}
Timer0Initial(); //定時器0 初始賦值
}
|
|