|
本帖最后由 51黑电子会员 于 2020-4-18 15:25 编辑
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char//宏定义,用uchar表示unsigned char,叫无符号字符型数据类型,取值范围为:0到255。
- #define uint unsigned int//宏定义,用uint表示unsigned int,叫无符号整数型数据类型,取值范围为:0到65535。
- sbit k1=P1^0;
- sbit k2=P1^5;
- sbit led=P3^4;
- uchar count,pwm,flag;
- void delay(uint z)//延时程序
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void keyscan()//按键扫描函数
- {
- if(k1==0)
- {
- delay(5);
- if(k1==0)
- {
- pwm++;
- if(pwm>=20)
- pwm=0;
- }
- while(!k1);
- }
- if(k2==0)
- {
- delay(5);
- if(k2==0)
- {
- if(pwm>0)
- pwm--;
- if(pwm<=0)
- pwm=0;
- }
- while(!k2);
- }
- }
- void TimerInit()//定时器0初始化函数
- {
- TMOD=0x01;//设定定时器0,工作模式为模式1。
- TH0=(65536-50000)/256;//TH0装初值
- TL0=(65536-50000)%256;//TL0装初值
- // TH1=0xfc;//TH1装初值
- // TL1=0x66;//TL1装初值
- EA=1;//开启定时器总中断
- ET0=1;//开启定时器0中断开关
- TR0=1;//启动定时器0
- // ET1=1;//开启定时器1中断开关
- // TR1=1;//启动定时器1
- }
- void timer0() interrupt 1//定时器0中断函数
- {
- TH0=(65536-50000)/256;//中断定时50毫秒,表示高低电平占用周期50毫秒,也表示高低电平频率(计算工式:F=1/T,其中F单位为赫兹,即Hz,而T单位为秒,即s。)为1/0.05s(由50毫秒除以1000求得0.05秒)=20Hz。
- TL0=(65536-50000)%256;//
- count++;
- if(count>=20)//中断次数变量达到20次,表示1秒(即中断次数变量20次X中断定时50毫秒)时间到 ,也表示高低电平占用周期1秒,另外表示高低电平频率(计算工式:F=1/T,其中F单位为赫兹,即Hz,而T单位为秒,即s。)为1/1s=1Hz。
- {
- count=0;
- }
- if(count<pwm)
- {
- led=0;//led为低电平
- }
- else
- {
- led=1;//led为高电平
- }
- }
- void main()//主函数
- {
- TimerInit();
- while(1)
- {
- keyscan();//按键扫描函数
- }
- }
复制代码
|
-
0.gif
(1.87 MB, 下载次数: 41)
评分
-
查看全部评分
|