PWM控制LED灯渐亮渐灭源程序-C51
51单片机控制LED七彩渐变灯

自己设计的51单片机控制LED七彩渐变灯MCU:89C51,89S51,89C2051等晶振:12MHz电路驱动(LED连接):P1.0连接蓝色LEDP1.1连接红色LEDP1.2连接绿色LED (必须使用纯绿色高亮LED,不可使用普通草绿管)全为低电平驱动(低电平点亮),可以加三极管驱动,红、蓝、绿LED也可以交换位置控制方式:PWM频率:约300-700Hz(我没有计算或测量过,只是试验显示效果足够好)调节级数:共600级,相当平滑编译后的HEX文件:687241197859316.rarHEX代码::0D009300E4FEEEC39F50060000000E80F555:0100A000223D:06005F00A9078D828C83CD:10006500E4FDE96008C292FF120093D292E5824551:10007500836009C291AF82120093D291EB4A600965:0D008500C290AF03120093D2900DBD0AD5BA:010********B:100003007508C8E4F509F50AE5086008E50A70040F:1000130015080509E5096008E50870041509050ACE:10002300E50A6008E5097004150A0508E5082509CD:10003300FFE433FE7C00EF250AFFEC3EFEEF64C8CD:100043004E60087508C8E4F509F50AE509FD7C006A:0C005300E50AFB7A00AF0812005F80ACE9:030000000200A15A:0C00A100787FE4F6D8FD75810A020003A8:00000001FFC语言源程序:/*******************************程序名称:七彩LED渐变程序编写者:ZH YUMCU:51/2051晶振:12MHz*********************************/ #include#includesbit gl=P1^2; //绿色sbit rl=P1^1; //红sbit bl=P1^0; //兰timer(unsigned char t){unsigned char b;for(b=0;b{_nop_();_nop_();_nop_();}}LEDout(unsigned char g,r,b){unsigned char a;for(a=0;a<10;a++){if(g!=0){gl=0;timer(g);gl=1;}if(r!=0){rl=0;timer(r);rl=1;}if(b!=0){bl=0;timer(b);bl=1;}}}main(){ unsigned char g,r,b;g=200;r=0;b=0;while(1){if(g!=0&&b==0){g--;r++;}if(r!=0&&g==0){r--;b++;}if(b!=0&&r==0){b--;g++;}if(g+r+b!=200){g=200;r=0;b=0;}LEDout(g,r,b);}}入无法下载HEX,大家可以用KEIL自己编译,或者使用记事本保存HEX代码(重命名为.HEX 文件)都可以再把.hex文件写入单片机,接好电路即可工作自己做的LED渐变灯(使用三极管8550驱动)及部分效果图:。
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)

基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件PWM.c******/#include <reg52.h>#include "Afx.h"#include "Config.c"#define CIRCLE 5 //脉冲周期//按键定义uchar key,key_tmp=0, _key_tmp=0;//显示定义uchar LedState=0xF0; //LED显示标志,0xF0不显示,Ox00显示uchar code LED_code_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位uchar dispbuf[4]={0,0,0,0}; //待显示数组uchar dispbitcnt=0; //选通、显示的位uchar mstcnt=0;uchar Centi_s=0,Sec=0,Min=0; //分、秒、1%秒//程序运行状态标志bit MotState=0; //电机启停标志bit DirState=0; //方向标志0前,1后uchar State1=-1;uchar State2=-1;uchar State3=0;uchar State4=-1;uchar LSpeed=0;uchar RSpeed=0;//其他uint RunTime=0;uint RTime_cnt=0;uint LWidth;uint RWidth; //脉宽uint Widcnt=1;uint Dispcnt;//函数声明void key_scan(void);void DisBuf(void);void K4(void);void K3(void);void K2(void);void K1(void);void disp( uchar H, uchar n );void main(void){P1|=0xF0;EA=1;ET0=1;ET1=1;TMOD=0x11;TH0=0xFC;TL0=0x66; //T0,1ms定时初值TH1=0xDB;TL1=0xFF; //T1,10ms定时初值TR0=1;Widcnt=1;while(1){key_scan();switch(key){case 0x80: K1(); break;case 0x40: K2(); break;case 0x20: K3(); break;case 0x10: K4(); break;default:break;}key=0;DisBuf();LWidth=LSpeed;RWidth=RSpeed;}}//按键扫描**模拟触发器防抖void key_scan(void){key_tmp=(~P3)&0xf0;if(key_tmp&&!_key_tmp) //有键按下{key=(~P3)&0xf0;}_key_tmp=key_tmp ;}//按键功能处理/逻辑控制void K4(void){if(State4==-1){State4=1;TR1=1;dispbuf[3]=1;LedState=0x00; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
用PWM控制渐变七彩灯C51程序

用PWM控制渐变七彩灯C51程序
一、硬件介绍:
(采用5050LED 2W) RGB三色LED控制引脚分别为单片机P1.2、P1.1、P1.0。
LED正极接主电源(24V)正极,负极接驱动3颗三极管的集电极,单片机控制脚分别接3颗NPN三极管,三极管发射极接地,而单片机的供电是来自三端稳压器7805,祥细原理如下:
二、实物图片:
三、软件部分:
1、/*原理:先亮红灯(保持一会儿)----红绿过度(绿加1、红减1循环240次)------绿灯亮起(保持一会儿)----绿兰过度(兰加1、绿减1循环240次)-----兰灯亮起(保持)-----兰白过度(绿加1、红加1循环240次、兰不变)---白红过度,技术支持网站:51hei/全部程序源代码:点此下载*/tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
c51单片机C语言编写的PWM程序

89c51单片机C语言编写的P W M程序(共3页)-本页仅作为预览文档封面,使用时请删除本页-89c51单片机C语言编写的PWM程序PWM, 单片机, C语言, 程序, 编写分享到:新浪微博 QQ空间开心网人人网说明:本程序使用STC89C52RC单片机,晶振,要使用本程序需要自己修改,我是用来控制直流电机的,外接了L298驱动电路,有问题或意见请回复,谢谢^_^#include ""#include ""转;speed<0.反转(-100~100)调用:extern int abs(int val); 取绝对值返回:/******************************************************************/ void motor(char speed1,char speed2){ //==============左边电机============= if (speed1>0) { IN1 =0;IN2 =1;//正转} else if (speed1<0) { IN1 =1;IN2 =0;//反转}//==============右边电机============= if (speed2>0) { IN3 =1;IN4 =0;//正转} else if (speed2<0) { IN3 =0;IN4 =1;//反转}}/******************************************************************名称:motor_PWM();功能:PWM占空比输出参数:无调用:无返回:无/******************************************************************/void motor_PWM (){ uchar PWM_abs1; uchar PWM_abs2;PWM_abs1=MOTO_speed1; PWM_abs2=MOTO_speed2;if (PWM_abs1>PWMAnd) ENA=1; //左边电机占空比输出else ENA=0; if (PWM_abs2>PWMAnd) ENB=1; //右边电机占空比输出else ENB=0; if (PWMAnd>=PWM_COUST) PWMAnd=0; //PWM计数清零else PWMAnd+=1;}/******************************************************************名称:void TIME_Init ();功能:定时器初始化指令:调用:无返回:无/******************************************************************/void TIME_Init (){//=========定时器T2初始化 PWM==================T2CON = 0x00;T2MOD = 0x00;RCAP2H = 0xff; //定时RCAP2L = 0x47; TH2 = 0xff; TL2 = 0x47; ET2 = 1; //定时器2中断开TR2 = 1; //PWM定时器关,PWM周期为10ms }/******************************************************************名称:void PWM_Time2 () interrupt 5功能:T2中断,PWM控制参数:调用:motor_PWM();//PWM占空比输出返回:/******************************************************************/ void PWM_Time2 () interrupt 5{ TR2 = 0; TF2 = 0; ET2 = 0; //定时器0中断禁止motor_PWM();//PWM占空比输出ET2 = 1; //定时中断0开启TR2 = 1;}main(){TIME_Init () ;motor(50,50);//左右电机的转速都是50}。
PWM控制渐变七彩灯的电路图及C51程序

#define uchar unsigned char//字浮型宏定义 #define uint unsigned int//整型宏定义 #define shudu 30//LED 渐变速度调整 #define dengji 1//LED 变化等级调整 sbit B1=P1^0;//红色灯控制 IO 口 sbit G1=P1^1;//绿色灯控制 IO 口 sbit R1=P1^2;//兰色灯控制 IO 口 uchar Rout,Bout,Gout;//红绿兰3个变量 /***************************************************/ /**********************延时子程序*******************/ /***************************************************/ void delay(uint z) { uint x,y;//局部变量定义 for(x=0;x<5;x++)//延时外循环 for(y=0;y<z;y++);//延时内循环 } /**********************************************/ /**********PWM 控制红绿兰3种灯亮灭时间**********/ /**********************************************/ void RGBpwm(uchar Rou,uchar Gou,uchar Bou)//3个局部变量,些部分为带参数函数 { if(Rou!=0)//如果红灯变量不等于0就亮红灯 { R1=1;//红灯亮 delay(Rou);//红灯亮起时间 R1=0;//红灯灭 } if(Gou!=0)//如果红灯变量不等于0就亮红灯 {
(完整)基于C51单片机和PWM调光的LED台灯设计

摘要LED台灯作为LED绿色照明光源产品,作为国家绿色照明推广使用的产品。
在实际的应用中,发现LED灯在周边亮度大时依然以同一功率发光,存在电能浪费;在周边亮度小时LED灯不能提供足够和恰当的光度。
本文介绍了以STC89C51为控制核心,通过光敏电阻感应光度,并利用PWM调光技术对LED进行光度的自动调节。
同时设置手动控制。
该LED台灯电路简单,很大程度上节省电能,延长LED灯寿命,适宜阅读.关键词LED台灯光度 PID PWM调光自动调节原创性声明本设计所用到的程序代码和电路均是来自本团队,如没有经过允许,不得复制和转载。
目录前言 (4)总体方案设计 (5)硬件设计 (5)软件设计 (9)总结 (12)附录1:作品照片 (13)附录2:程序 (15)前言LED照明又称固态照明,作为继白炽灯、荧光灯后的第三代照明技术,具有节能、环保、安全可靠的特点,固态光源是被业界看好的未来十年替换传统照明器具极具潜力的新型光源,代表照明技术的未来。
发展新固态照明,不仅是照明领域的革命,而且符合当前政府提出的“建设资源节约型和环境友好型社会”的要求。
LED台灯就是以LED(Light Emitting Diode)即发光二极管为光源的台灯,LED是一种固态的半导体器件,它可以直接把电转化为光.LED台灯是典型的绿色照明光源产品,作为国家绿色照明推广使用的产品,具有广阔的应用前景。
在实际的应用中,发现LED灯在周边亮度大时依然以同一功率发光,存在电能浪费。
另外一方面,因为LED的发热量和电流存在正相关的关系,发热影响了LED的寿命,所以在不必要的亮度下也减少了LED的寿命.然而,当LED在周边亮度小时,LED灯不能提供足够和恰当的光度,这样又影响了阅读,造成视觉疲劳。
PWM方法的基本思想就是利用单片机具有的PWM端口,在不改变PWM方波周期的前提下,通过软件的方法调整单片机的PWM控制寄存器来调整PWM的占空比,从而控制充电电流.本方法所要求的单片机必须具有ADC端口和PWM端口这两个必须条件,另外ADC的位数尽量高,单片机的工作速度尽量快。
51单片机脉冲宽度调制(PWM)控制LED灯亮度

51单片机脉冲宽度调制(PWM)控制LED灯亮度作者:来源:本站原创点击数:576 更新时间:2009年06月28日/*介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。
程序出自:单片机网http://www. ,如有问题可在论坛提出,程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale 就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。
*/#include "AT89X51.H" //模拟PWM输出控制灯的10个亮度级unsigned int scale; //占空比控制变量void main(void) // 主程序{ unsigned int n; //延时循环变量TMOD=0x02; //定时器0,工作模式2(0000,0010),8位定时模式TH0=0x06; //写入预置初值6到定时器0,使250微秒溢出一次(12MHz)TL0=0x06; //写入预置值TR0=1; //启动定时器ET0=1; //允许定时器0中断EA=1; //允许总中断while(1) //无限循环,实际应用中,这里是做主要工作{ for(n=0;n<50000;n++); //每过一段时间,就自动加一个档次的亮度scale++; //占空比控制变量scale加1if(scale==10) scale=0; //如果scale=10,使scale为0} }timer0() interrupt 1 //定时器0中断服务程序{ static unsigned int tt ; //tt用来保存当前时间在一秒中的比例位置tt++; //每250微秒增加1if(tt==10) //2.5毫秒的时钟周期{ tt=0; //使tt=0,开始新的PWM周期P2_0=0; //使LED灯亮}if(scale==tt) //按照当前占空比切换输出为高电平P2_0=1; //使LED灯灭}/*程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平,由于scale是变量,所以改变scale就可以改变占空比。
C51代码(PWM)

1.#include < reg51.h >2.#include < intrins.h >3.4.sbit K1 =P1^4 ; //增加键5.sbit K2 =P1^5 ; //减少键6.sbit P00 =P0^1;7.sbit BEEP =P3^7 ; //蜂鸣器8.unsigned char PWM=0xe7; //赋初值9.10.void Beep();11.void delayms(unsigned char ms);12.void delay(unsigned char t);13.14./*********************************************************/15.void main()16.{17.18. P1=0xff;19. TMOD=0x21 ;20. TH0=0xff ; //50us延时常数21. TL0=0xce ; //频率调节22.23. TH1=PWM ; //脉宽调节24. TL1=0 ;25.26. EA=1;27. ET0=1;28. ET1=1;29.30. TR0=1 ;31.32. while(1)33. {34. do{35. if(PWM!=0xff)36. {PWM++ ;delayms(10);}37. else Beep() ;38. }39. while(K1==0);40.41. do{42. if(PWM!=0xce)43. {PWM-- ;delayms(10);}44. else Beep() ;45. }46. while(K2==0);47. }48.}49.50.void timer0() interrupt 151.{52. TR1=0 ;53. TH0=0xff ;54. TL0=0xce ;55. TH1=PWM ;56. TR1=1 ;57. P00=0 ; //启动输出58.}59.60.61.void timer1() interrupt 362.{63. TR1=0 ;64. P00=1 ; //完毕输出65.}66.67./*********************************************************/68.//蜂鸣器子程序69./*********************************************************/70.71.void Beep()72. {73. unsigned char i ;74. for (i=0 ;i<100 ;i++)75. {76. delay(100) ;77. BEEP=!BEEP ; //Beep取反78. }79. BEEP=1 ; //关闭蜂鸣器80. delayms(100);81. }82.83./*********************************************************/84.// 延时子程序85./*********************************************************/86.void delay(unsigned char t)87.{88. while(t--) ;89.}90.91./*********************************************************/92.// 延时子程序93./*********************************************************/94.void delayms(unsigned char ms)95.96.{97. unsigned char i ;98. while(ms--)99. {100. for(i = 0 ; i < 120 ; i++) ;101. }102.}103.104./*********************************************************/ 105.#include < reg51.h >106.#include < intrins.h >107.108.sbit K1 =P1^4 ; //增加键109.sbit K2 =P1^5 ; //减少键110.sbit P00 =P0^1;111.sbit BEEP =P3^7 ; //蜂鸣器112.unsigned char PWM=0xe7; //赋初值113.114.void Beep();115.void delayms(unsigned char ms);116.void delay(unsigned char t);117.118./*********************************************************/ 119.void main()120.{121.122. P1=0xff;123. TMOD=0x21 ;124. TH0=0xff ; //50us延时常数125. TL0=0xce ; //频率调节126.127. TH1=PWM ; //脉宽调节128. TL1=0 ;129.130. EA=1;131. ET0=1;132. ET1=1;134. TR0=1 ;135.136. while(1)137. {138. do{139. if(PWM!=0xff)140. {PWM++ ;delayms(10);} 141. else Beep() ;142. }143. while(K1==0);144.145. do{146. if(PWM!=0xce)147. {PWM-- ;delayms(10);} 148. else Beep() ;149. }150. while(K2==0);151. }152.}153.154.void timer0() interrupt 1156. TR1=0 ;157. TH0=0xff ;158. TL0=0xce ;159. TH1=PWM ;160. TR1=1 ;161. P00=0 ; //启动输出162.}163.164.165.void timer1() interrupt 3166.{167. TR1=0 ;168. P00=1 ; //完毕输出169.}170.171./*********************************************************/ 172.//蜂鸣器子程序173./*********************************************************/ 174.175.void Beep()176. {177. unsigned char i ;178. for (i=0 ;i<100 ;i++)179. {180. delay(100) ;181. BEEP=!BEEP ; //Beep取反182. }183. BEEP=1 ; //关闭蜂鸣器184. delayms(100);185. }186.187./*********************************************************/ 188.// 延时子程序189./*********************************************************/ 190.void delay(unsigned char t)191.{192. while(t--) ;193.}194.195./*********************************************************/ 196.// 延时子程序197./*********************************************************/ 198.void delayms(unsigned char ms)199.200.{201. unsigned char i ;202. while(ms--)203. {204. for(i = 0 ; i < 120 ; i++) ;205. }206.}207.208./*********************************************************/ 209.#include < reg51.h >210.#include < intrins.h >211.212.sbit K1 =P1^4 ; //增加键213.sbit K2 =P1^5 ; //减少键214.sbit P00 =P0^1;215.sbit BEEP =P3^7 ; //蜂鸣器216.unsigned char PWM=0xe7; //赋初值217.218.void Beep();219.void delayms(unsigned char ms);220.void delay(unsigned char t);221.222./*********************************************************/ 223.void main()224.{225.226. P1=0xff;227. TMOD=0x21 ;228. TH0=0xff ; //50us延时常数229. TL0=0xce ; //频率调节230.231. TH1=PWM ; //脉宽调节232. TL1=0 ;233.234. EA=1;235. ET0=1;236. ET1=1;237.238. TR0=1 ;239.240. while(1)241. {242. do{243. if(PWM!=0xff)244. {PWM++ ;delayms(10);} 245. else Beep() ;246. }247. while(K1==0);248.249. do{250. if(PWM!=0xce)251. {PWM-- ;delayms(10);} 252. else Beep() ;253. }254. while(K2==0);255. }256.}257.258.void timer0() interrupt 1259.{260. TR1=0 ;261. TH0=0xff ;262. TL0=0xce ;263. TH1=PWM ;264. TR1=1 ;265. P00=0 ; //启动输出266.}267.268.269.void timer1() interrupt 3270.{271. TR1=0 ;272. P00=1 ; //完毕输出273.}274.275./*********************************************************/ 276.//蜂鸣器子程序277./*********************************************************/ 278.279.void Beep()280. {281. unsigned char i ;282. for (i=0 ;i<100 ;i++)283. {284. delay(100) ;285. BEEP=!BEEP ; //Beep取反286. }287. BEEP=1 ; //关闭蜂鸣器288. delayms(100);289. }290.291./*********************************************************/ 292.// 延时子程序293./*********************************************************/ 294.void delay(unsigned char t)295.{296. while(t--) ;297.}298.299./*********************************************************/ 300.// 延时子程序301./*********************************************************/ 302.void delayms(unsigned char ms)303.304.{305. unsigned char i ;306. while(ms--)307. {308. for(i = 0 ; i < 120 ; i++) ;309. }310.}311.312./*********************************************************/ 313.#include < reg51.h >314.#include < intrins.h >315.316.sbit K1 =P1^4 ; //增加键317.sbit K2 =P1^5 ; //减少键318.sbit P00 =P0^1;319.sbit BEEP =P3^7 ; //蜂鸣器320.unsigned char PWM=0xe7; //赋初值321.322.void Beep();323.void delayms(unsigned char ms);324.void delay(unsigned char t);325.326./*********************************************************/ 327.void main()328.{329.330. P1=0xff;331. TMOD=0x21 ;332. TH0=0xff ; //50us延时常数333. TL0=0xce ; //频率调节334.335. TH1=PWM ; //脉宽调节336. TL1=0 ;337.338. EA=1;339. ET0=1;340. ET1=1;341.342. TR0=1 ;343.344. while(1)345. {346. do{347. if(PWM!=0xff)348. {PWM++ ;delayms(10);}349. else Beep() ;350. }351. while(K1==0);352.354. if(PWM!=0xce)355. {PWM-- ;delayms(10);} 356. else Beep() ;357. }358. while(K2==0);359. }360.}361.362.void timer0() interrupt 1 363.{364. TR1=0 ;365. TH0=0xff ;366. TL0=0xce ;367. TH1=PWM ;368. TR1=1 ;369. P00=0 ; //启动输出370.}371.372.373.void timer1() interrupt 3 374.{376. P00=1 ; //完毕输出377.}378.379./*********************************************************/ 380.//蜂鸣器子程序381./*********************************************************/ 382.383.void Beep()384. {385. unsigned char i ;386. for (i=0 ;i<100 ;i++)387. {388. delay(100) ;389. BEEP=!BEEP ; //Beep取反390. }391. BEEP=1 ; //关闭蜂鸣器392. delayms(100);393. }394.395./*********************************************************/ 396.// 延时子程序397./*********************************************************/ 398.void delay(unsigned char t)399.{400. while(t--) ;401.}402.403./*********************************************************/ 404.// 延时子程序405./*********************************************************/ 406.void delayms(unsigned char ms)407.408.{409. unsigned char i ;410. while(ms--)411. {412. for(i = 0 ; i < 120 ; i++) ;413. }414.}415.416./*********************************************************/ 417.#include < reg51.h >418.#include < intrins.h >419.420.sbit K1 =P1^4 ; //增加键421.sbit K2 =P1^5 ; //减少键422.sbit P00 =P0^1;423.sbit BEEP =P3^7 ; //蜂鸣器424.unsigned char PWM=0xe7; //赋初值425.426.void Beep();427.void delayms(unsigned char ms);428.void delay(unsigned char t);429.430./*********************************************************/ 431.void main()432.{433.434. P1=0xff;435. TMOD=0x21 ;436. TH0=0xff ; //50us延时常数437. TL0=0xce ; //频率调节438.439. TH1=PWM ; //脉宽调节440. TL1=0 ;441.442. EA=1;443. ET0=1;444. ET1=1;445.446. TR0=1 ;447.448. while(1)449. {450. do{451. if(PWM!=0xff)452. {PWM++ ;delayms(10);} 453. else Beep() ;454. }455. while(K1==0);456.457. do{458. if(PWM!=0xce)459. {PWM-- ;delayms(10);} 460. else Beep() ;461. }462. while(K2==0);463. }464.}465.466.void timer0() interrupt 1467.{468. TR1=0 ;469. TH0=0xff ;470. TL0=0xce ;471. TH1=PWM ;472. TR1=1 ;473. P00=0 ; //启动输出474.}475.476.477.void timer1() interrupt 3478.{479. TR1=0 ;480. P00=1 ; //完毕输出481.}482.483./*********************************************************/ 484.//蜂鸣器子程序486.487.void Beep()488. {489. unsigned char i ;490. for (i=0 ;i<100 ;i++)491. {492. delay(100) ;493. BEEP=!BEEP ; //Beep取反494. }495. BEEP=1 ; //关闭蜂鸣器496. delayms(100);497. }498.499./*********************************************************/ 500.// 延时子程序501./*********************************************************/ 502.void delay(unsigned char t)503.{504. while(t--) ;505.}506.508.// 延时子程序509./*********************************************************/ 510.void delayms(unsigned char ms)511.512.{513. unsigned char i ;514. while(ms--)515. {516. for(i = 0 ; i < 120 ; i++) ;517. }518.}519.520./*********************************************************/ 521.#include < reg51.h >522.#include < intrins.h >523.524.sbit K1 =P1^4 ; //增加键525.sbit K2 =P1^5 ; //减少键526.sbit P00 =P0^1;527.sbit BEEP =P3^7 ; //蜂鸣器528.unsigned char PWM=0xe7; //赋初值530.void Beep();531.void delayms(unsigned char ms);532.void delay(unsigned char t);533.534./*********************************************************/ 535.void main()536.{537.538. P1=0xff;539. TMOD=0x21 ;540. TH0=0xff ; //50us延时常数541. TL0=0xce ; //频率调节542.543. TH1=PWM ; //脉宽调节544. TL1=0 ;545.546. EA=1;547. ET0=1;548. ET1=1;549.550. TR0=1 ;552. while(1)553. {554. do{555. if(PWM!=0xff)556. {PWM++ ;delayms(10);} 557. else Beep() ;558. }559. while(K1==0);560.561. do{562. if(PWM!=0xce)563. {PWM-- ;delayms(10);} 564. else Beep() ;565. }566. while(K2==0);567. }568.}569.570.void timer0() interrupt 1571.{572. TR1=0 ;573. TH0=0xff ;574. TL0=0xce ;575. TH1=PWM ;576. TR1=1 ;577. P00=0 ; //启动输出578.}579.580.581.void timer1() interrupt 3582.{583. TR1=0 ;584. P00=1 ; //完毕输出585.}586.587./*********************************************************/ 588.//蜂鸣器子程序589./*********************************************************/ 590.591.void Beep()592. {593. unsigned char i ;594. for (i=0 ;i<100 ;i++)595. {596. delay(100) ;597. BEEP=!BEEP ; //Beep取反598. }599. BEEP=1 ; //关闭蜂鸣器600. delayms(100);601. }602.603./*********************************************************/ 604.// 延时子程序605./*********************************************************/ 606.void delay(unsigned char t)607.{608. while(t--) ;609.}610.611./*********************************************************/ 612.// 延时子程序613./*********************************************************/ 614.void delayms(unsigned char ms)615.616.{617. unsigned char i ;618. while(ms--)619. {620. for(i = 0 ; i < 120 ; i++) ;621. }622.}623.624./*********************************************************/。
PWM调节led等的亮度的程序

#include<reg52.h>bit flay;sbit led=P1^1;#define uchar unsigned char#define uint unsigned intsbit led=P1^1;uchar pwm=0,aa=0;void delay(uint);void delays();main(){TMOD|=0x01; // 定时器初始化TH0=(65536-100)/256;// 给定时器赋值TL0=(65536-100)%256;//给定时器赋值EA=1; // 开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器开始计数while(1){while(!flay){pwm++; //pwm表示占空比delay(20);//延时大约20毫秒保证pwm每增加一次都会进入中断if(pwm==100)flay=1;}//上面这段代码占空比增加//下面这段代码占空比减少while(flay){pwm--;delay(20);if(pwm==1)flay=0;}}}void delay(uint m) //大概延时m毫秒{uint i,j;for(i=0;i<m;i++)for(j=0;j<110;j++);}void delays() //延时函数{uint i,j;for(i=0;i<1;i++)for(j=0;j<1;j++);}void time() interrupt 1{//每100微秒进入一次中断TH0=(65536-100)/256;TL0=(65536-100)%256;if(aa==pwm){led=1; //熄灭8个led灯} aa++;if(aa==100) //周期为10毫秒{aa=0;if(pwm!=0)led=0; //点亮8个了的等}}。
PWM信号控制KeilC51演示程序

/*----------------------------------------------------------------零耗时低频宽脉冲软PWM信号控制Keil C51演示程序C51文件PwmDemo.cHotPower@ 作于2004.11.17与大雁塔村队部在uV3中对PWM信号进行"实时仿真"效果逼真。
-----------------------------------------------------------------*/#include//#include#include/*------------------------------------------------A T89S5X SFR定义(REGX52.h中未定义)--------------------------------------------------*/sfr AUXR = 0x8e;sfr WDTRST = 0xa6;sfr16 TIMEER2 = 0xcc;sfr16 RCAP2 = 0xca;/*-----------------------------------------------PWM管脚定义------------------------------------------------*/sbit PWM = P1^0;//可以为任意IO管脚typedef struct Systemstruct{//系统数据结构unsigned int PwmCount;//700~2300uSunsigned int RamTest;//内部ram自检变量/*--------------------------------------------------------------------注意将STARTUP.A51中的IDA TALEN改写为0,RamTest才能完成MCU掉电自检。
51单片机的七彩LED灯渐变调光调色程序

51单片机的七彩LED灯渐变调光调色程序//------------------------------------------------------------------------------------// Main.c//------------------------------------------------------------------------------------// Copyright (C) 2013 Shenyang JYXD.// WEN BO RUI// Tool chain: KEIL Full 'c'////#pragma CD OE DB SB// Compilation directives#include;#include;#define uchar unsigned char#define uint unsigned intuint Period;//Period刷新周期uint PWM;uint Pulse;//脉冲个数uchar Speed;//速度变量uchar count;uint excount;bit Gra;//渐变/跳变总控制位bit Gra7;//七彩渐亮渐灭控制位bit Gra3;//红绿蓝渐亮渐灭控制位bit BP;//亮到暗,暗到亮转换位bit LEDdelay ;//LED定时到标志位sbit key1 = P3^1;//花样组合键1sbit key2 = P3^0;//花样组合键2sbit key3 = P3^5;//速度组合键1sbit key4 = P3^4;//速度组合键2ucharled1[12]={0x10,0x030,0x20,0x60,0x40,0x50,0x70,0x5 0,0x40,0x60,0x20,0x30};//红、黄、绿、青、蓝、粉、白、粉、蓝、青、绿、黄ucharled2[24]={0x10,0x00,0x30,0x00,0x20,0x00,0x60,0x00 ,0x40,0x00,0x50,0x00,0x70,0x00,0x50,0x00,0x40,0x00,0x60,0x00,0x20,0x00 ,0x30,0x00};uchar led3[3]={0x10,0x20,0x40};//红、绿、蓝uchar ledcount,ledcount1;//*********************************************** ************//以下定义函数// 1毫秒延时函数delayms();花样及速度扫描函数keyscan();//*********************************************** ************/*void delayms(unsigned int ms){unsigned char i ;while(ms--){for(i = 0 ; i ;跳变无灭灯过程void Pattern2();//花样2函数--------->;跳变有灭灯过程void Pattern34();void keyscan(){if((key4==1)&&(key3==1)) {Speed= 20;Period = 25;}//预设4种速度200MSif((key4==0)&&(key3==1)) {Speed= 50;Period = 50;}//500MSif((key4==1)&&(key3==0)) {Speed= 100;Period = 100;}//1Sif((key4==0)&&(key3==0)) {Speed= 150;Period = 200;}//1.5Sif((key2==1)&&(key1==1)) {ledcount1 =0;Pattern1();}//预设4种花样if((key2==0)&&(key1==1)) {ledcount1 =0;Pattern2();}if((key2==1)&&(key1==0)) {ledcount = 0;Gra3 = 1;Pattern34();}if((key2==0)&&(key1==0)) {ledcount = 0;Gra7 = 1;Pattern34();}}void value(){if(Speed == 20) PWM = Pulse*8;if(Speed == 50) PWM = Pulse*4;//脉冲个数if(Speed == 100)PWM = Pulse*2;if(Speed == 150)PWM = Pulse;}void Reset(void){unsigned char coderst[ ]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};(*((void (*)(void))(rst)))();}void main(){_nop_ ();_nop_ ();_nop_ ();P1 = 0;TMOD = 0x11;//11.0592M晶振的10ms定时初值(100分之一秒)TH0 = 0x0db;TL0 = 0x0ff;TH1 = 0x0ff;//0.05ms(20000分之一秒)TL1 = 0x0D1;EA = 1;//开启总中断允许ET0 = 1;//允许T0定时器中断ET1 = 1;//允许T1定时器中断TR0 = 1;//开启T0定时器EX0=1;//开外部中断0IT0=1;//下降沿触发while(1){keyscan();}}//*********************************************** **************************//Pattern1() 花样函数1-------------跳变无灭灯过程//*********************************************** **************************void Pattern1(){//keyscan();Gra = 0;//跳变位=0if(LEDdelay){LEDdelay = 0;P1 = led1[ledcount];ledcount++;if(ledcount>;11){ledcount = 0;}}}//*********************************************** ************************//Pattern2() 花样函数2-------------跳变有灭灯过程//*********************************************** ************************void Pattern2(){//keyscan();Gra = 0;if(LEDdelay){LEDdelay = 0;P1 = led2[ledcount];ledcount++;if(ledcount>;23){ledcount = 0;}}}//*********************************************** ************************//Pattern3() 花样函数3-------------3彩渐变//*********************************************** ************************/*void Pattern3(){keyscan();if(Speed == 20) Period = 25;if(Speed == 50) Period = 50;if(Speed == 100)Period = 100;if(Speed == 150)Period = 200;Gra = 1;Gra3 = 1;}*///*********************************************** ************************//Pattern4() 花样函数4-------------7彩渐变//*********************************************** ************************void Pattern34(){Gra = 1;//渐变位 = 1}/************************************************ *********/// 定时器0中断服务程序/************************************************ *********/void time0(void) interrupt 1{TR1 =0;TF0 =0;TH0=0xdb;//重新写入初值TL0=0xff;if(!Gra)//执行跳变程序{count ++;if(count >; Speed){LEDdelay = 1;count = 0;}}if(Gra){TR1 = 1;//开启TR1;if(!BP)//{if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }Pulse++;value();if(Pulse >;= Period) {Pulse = Period;BP = 1;//一个周期完成转换模式}}if(BP){if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }value();Pulse--;//脉冲个数if(Pulse == 0){Pulse = 0;BP = 0;//一个周期完成转换模式 ledcount1++;if(Gra7){if(ledcount1 >; 11) {ledcount1 = 0;}Gra7 = 0;}if(Gra3){if(ledcount1 >; 2) {ledcount1 = 0;}Gra3 = 0;}}}}/************************************************ *********/// 定时器1中断服务程序/************************************************ *********/void timer1() interrupt 3{PWM --;TH1 = 0xff;//0.05ms(20000分之一秒)TL1 = 0xD1;if(PWM == 0){P1 = 0;TR1 = 0;}}/************************************************ *********/// 外部中断0中断服务程序下降沿触发/*********************************************************/void extern0(void) interrupt 0 {IE0 = 0;// 清标志位excount++;if(excount>;50)// 50大约3秒{EA = 0;//P1_5 = 1;excount = 0;Reset();}}。
51单片机独立按键控制八路LED亮灭程序代码

//51单片机独立按键控制八路LED灯亮灭程序代码//#include <reg51.h> //调用头文件unsigned int count,count1; //定义两个int类型的变量sbit key=P3^5; //定义按键接入串口sbit key1=P3^4; //定义按键接入串口//以下是一个延时函数,便于后面程序按键的消抖,除了这个用途外,延时函数还有很多用途......//void delay(unsigned int ms){while(ms--);}//以下是一个声明的按键检测函数,在这个函数中通过count及count1两个变量的值来确定按键按下LED的亮灭,我这用了两个按键,不同按键控制LED从不同方向一次点亮,函数中采用了if语句与switch语句相结合,这是关键所在。
//void keysan(){if(key==0){delay(10);if(key==0){count++;switch(count){case 0:P1=0xff;break;case 1:P1=0xfe;break;case 2:P1=0xfd;break;case 3:P1=0xfb;break;case 4:P1=0xf7;break;case 5:P1=0xef;break;case 6:P1=0xdf;break;case 7:P1=0xbf;break;case 8:P1=0x7f;break;case 9:P1=0xff;break;}if(count>=9){count=0;}while(!key);}}delay(10);if(key1==0){delay(10);if(key1==0){count1++;switch(count1){case 0:P1=0xff;break; case 1:P1=0x7f;break; case 2:P1=0xbf;break; case 3:P1=0xdf;break; case 4:P1=0xef;break; case 5:P1=0xf7;break; case 6:P1=0xfb;break; case 7:P1=0xfd;break; case 8:P1=0xfe;break; case 9:P1=0xff;break; }if(count1>=9){count1=0;}while(!key1);}}}void main(){while(1){keysan();}}。
PWM控制LED灯渐亮渐灭源程序-C51

PWM控制LED灯渐亮渐灭源程序-C51/*******************************************************************/ /* ME300B单片机开发系统演示程序- PWM控制LED灯渐亮渐灭*//* LED显示*//*******************************************************************/// PWM 控制LED 灯渐亮渐灭程序// 适用ME300B 开发系统// 晶振为11.0592M// 利用定时器控制产生占空比可变的PWM 波// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
/*********************************************************/#include < reg51.h >#include < intrins.h >sbit K1 =P1^4; //增加键sbit K2 =P1^5; //减少键sbit BEEP =P3^7; //蜂鸣器unsigned char PWM=0x7f; //赋初值void Beep();void delayms(unsigned char ms);void delay(unsigned char t);/*********************************************************/void main(){P1=0xff;TMOD=0x21;TH0=0xfc; //1ms延时常数TL0=0x66; //频率调节TH1=PWM; //脉宽调节TL1=0;EA=1;ET0=1;ET1=1;TR0=1;while(1){do{if(PWM!=0xff){PWM++ ;delayms(10);}else Beep();}while(K1==0);do{if(PWM!=0x02){PWM-- ;delayms(10);}else Beep();}while(K2==0);}}/*********************************************************/ // 定时器0中断服务程序./*********************************************************/ void timer0() interrupt 1{TR1=0;TH0=0xfc;TL0=0x66;TH1=PWM;TR1=1;P0=0x00; //启动输出}/*********************************************************/ // 定时器1中断服务程序/*********************************************************/ void timer1() interrupt 3{TR1=0;P0=0xff; //结束输出}/*********************************************************///蜂鸣器子程序/*********************************************************/void Beep(){unsigned char i;for (i=0;i<100;i++){delay(100);BEEP=!BEEP; //Beep取反}BEEP=1; //关闭蜂鸣器delayms(100);}/*********************************************************/ // 延时子程序/*********************************************************/ void delay(unsigned char t){while(t--);}/*********************************************************/ // 延时子程序/*********************************************************/ void delayms(unsigned char ms){unsigned char i;while(ms--){for(i = 0; i<120;i++);}}。
基于C51单片机和PWM调光的LED台灯设计

基于C51单片机和PWM调光的LED台灯设计LED台灯是一种节能环保的照明产品,具有调光功能可以根据需要调节亮度。
本文将以C51单片机为核心,结合PWM调光技术设计一款LED台灯。
1.系统设计本设计的LED台灯由C51单片机、三极管、电阻、电容、可变电阻和LED灯组成。
C51单片机作为控制器,通过PWM调整LED的亮度。
三极管起到放大电流的作用,电阻和电容用于稳压滤波,可变电阻用于调节亮度。
2.硬件设计(1)电源电路LED台灯的电源电路由变压器、整流电路和稳压滤波电路组成。
变压器将220V交流电转换为合适的低压交流电,整流电路将交流电转换为直流电,稳压滤波电路将输出的直流电进行稳压和滤波。
(2)控制电路C51单片机作为控制器,需要将其正常工作电压5V进行稳定和滤波,因此在其供电端接入电容和电阻以实现稳定电压。
三极管通过放大电流的方式驱动LED。
(3)亮度调节电路可变电阻与PWM信号相连,通过调节可变电阻的阻值来改变PWM信号的占空比,进而改变LED的亮度。
3.软件设计(1)初始化设置初始化IO口,设置PWM输出引脚。
设置定时器和定时器中断,设定一个较小的时间间隔,用于产生PWM信号。
(2)PWM生成使用定时器中断来产生PWM信号。
通过改变定时器中断产生的时间间隔,可以改变PWM信号的占空比。
占空比越大,LED越亮;占空比越小,LED越暗。
(3)亮度调节利用ADC模块读取可变电阻的电压值,将其转换为具体的阻值。
根据阻值计算出对应的占空比,通过改变定时器中断的时间间隔来调整PWM信号的占空比,从而改变LED的亮度。
4.结果验证将C51单片机烧录好的程序与硬件连接,通过调节可变电阻,LED的亮度可以自由调节。
5.总结本设计利用C51单片机和PWM调光技术实现了LED台灯的设计,通过调节PWM信号的占空比来改变LED的亮度,实现了灯光的调光功能。
这种设计具有低功耗、节能环保的特点,在实际应用中有很大的潜力。
单片机PWM控制LED亮度

//1ms 延时常数 //频率调节 //脉宽调节
else Beep() ; } while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);} else Beep() ; } while(K2==0); } } /*********************************************************/ // 定时器 0 中断服务程序. /*********************************************************/ void timer0() interrupt 1 { TR1=0 ; TH0=0xfc ; TL0=0x66 ; TH1=PWM ; TR1=1 ; P0=0x00 ; //启动输出 } /*********************************************************/ // 定时器 1 中断服务程序 /*********************************************************/ void timer1() interrupt 3 { TR1=0 ; P0=0xff ; //结束输出 } /*********************************************************/ //蜂鸣器子程序 /*********************************************************/ void Beep() { unsigned char i ; for (i=0 ;i<100 ;i++) {
void Beep(); void delayms(unsigned char ms); void delay(unsigned char t);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文转载自:转载请著名出处
/*******************************************************************/
/* */
/* ME300B单片机开发系统演示程序- PWM控制LED灯渐亮渐
灭 */
/* */
/* LED显
示*/
/* */
/* 邮
箱: gguoqing@ */ /* 网站:
*/
/* 作者:
gguoqing */
/* 时间:
2005/11/30 */
/* */
/*【版权】Copyright(C)伟纳电子 All Rights Reserved */ /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */ /* */
/*******************************************************************/
// PWM 控制LED 灯渐亮渐灭程序
// 适用ME300B 开发系统
// 晶振为11.0592M
// 利用定时器控制产生占空比可变的PWM 波
// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
/*********************************************************/
#include < reg51.h >
#include < intrins.h >
sbit K1 =P1^4 ; //增加键
sbit K2 =P1^5 ; //减少键
sbit BEEP =P3^7 ; //蜂鸣器
unsigned char PWM=0x7f ; //赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/ void main()
{
P1=0xff;
TMOD=0x21 ;
TH0=0xfc ; //1ms延时常数
TL0=0x66 ; //频率调节
TH1=PWM ; //脉宽调节
TL1=0 ;
EA=1;
ET0=1;
ET1=1;
TR0=1 ;
{
do{
if(PWM!=0xff)
{PWM++ ;delayms(10);}
else Beep() ;
}
while(K1==0);
do{
if(PWM!=0x02)
{PWM-- ;delayms(10);}
else Beep() ;
}
while(K2==0);
}
}
/*********************************************************/ // 定时器0中断服务程序.
/*********************************************************/ void timer0() interrupt 1
{
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
P0=0x00 ; //启动输出
}
/*********************************************************/ // 定时器1中断服务程序
/*********************************************************/ void timer1() interrupt 3
{
TR1=0 ;
P0=0xff ; //结束输出
}
/*********************************************************/ //蜂鸣器子程序
/*********************************************************/ void Beep()
{
unsigned char i ;
for (i=0 ;i<100 ;i++)
{
delay(100) ;
BEEP=!BEEP ; //Beep取反
}
BEEP=1 ; //关闭蜂鸣器
delayms(100);
}
/*********************************************************/ // 延时子程序
/*********************************************************/ void delay(unsigned char t)
{
while(t--) ;
}
/*********************************************************/ // 延时子程序
/*********************************************************/ void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
/*********************************************************/
本文转载自:转载请著名出处。