突然想到的一个问题,但尝试了许久,没有得出一个结论。想来问问大神的做法,借以参考。
5条回答 默认 最新
- soar3033 2021-01-19 08:18关注
#include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit PWM=P2^0;// P2.0输出pwm uchar flag;//用于标识亮度增大/减小 uchar v;//亮度值满值255 uchar flag2;//一秒标识 uchar count;//用于一秒计数 void main() { flag=1; flag2=0; count=0; v=0; TMOD=0x01;//定时器0工作方式1 TH0=0xf8;//赋初值定时 TL0=0x2f;//6MHz主频下4ms EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 while(1) { light(v); if(flag2){//串口发送亮度 flag2=0; send_byte(v); } } } void light(uint l) { PWM=1; delayus(l); PWM=0; delayus(1000-l); } void delayus(uint x) { while(x--); } void tim0() interrupt 1 { TR0=0;//赋初值时,关闭定时器 TH0=0xf8;//赋初值定时 TL0=0x2f; TR0=1;//打开定时器 if(flag){//每ms更改v值 v++; } else{ v--; } if(v>254){ flag=0; } if(v<1){ flag=1; } count++; if(count==250){//一秒计数 count=0; flag2=1; } } void send_byte(uchar by){ SBUF = by; while(!TI);//等待发送完毕 TI = 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1