单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果_第1页
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果_第2页
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果_第3页
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果_第4页
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机PWM技术实现呼吸灯和 KTV等娱乐场所的灯光闪烁效果程序是在 51hei 单片机开发板上面做的,电路很简单,最小系统+P0的八个led即可.ADDRO和ENLE那是开 发板上的 led 使能电路控制端,如果是你自己做的电路 可以删掉这几个语句 . 或者不用管他,不会影响程序的运 行./* * filemain.c* author :xr* date2014 年 4 月 15 日 20:34:05 - 2014 年 4 月 15 日 22:28:08* version: V1.2.3* brief :PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效 果 单片机 STC89C52RC M

2、C晶振 11.0592MHZ* */ #include ;/74HC138sbit ADDRO = P1A0;sbit ADDR1 = PM1;sbit ADDR2 = P1A2;sbit ADDR3 = P1A3;sbit ENLED = P1A4;/sbit PWMOUT = P0A0;/PWM 输出#define PWMOUT P0/8个 LED 小灯同时呼吸/ 灯光控制编码(调整PWM勺占空比)unsigned char code PWM_Table = 1, 3, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41,44, 47, 50,53,

3、 56, 59, 62, 65, 68,71, 74, 77, 80, 83, 86, 89,92, 95, 98, 99; /34 个占空比unsigned char heighHR0, heighLR0;/PWM 高电平计 数初值勺高字节和低字节unsigned char lowHR0, lowLR0;/PWM 低电平计数初值勺高字节和低字节 unsigned char thr1, tlr1;/T1 计数初值高字节和低字节unsigned long PWMCounter = 0;/PWM 设定频率后勺对应勺所需计数值 UL 型void Initial();void ConfigPWM(un

4、signed int fr, unsigned char dc);void ConfigTimer1(unsigned int xms);void main(void)*Initial();/*ConfigPWM(100, 5);/ 设定 PWlM勺脉冲宽度为 100hz,即 10ms,占空比为5% 当PWM勺脉冲宽度小于 100HZ时, 形成勺是闪烁勺灯光效果ConfigTimer1(50); / 定时 50ms调整 PWM占空比/*PWM技术实现KTV等娱乐场所的灯光闪烁效果 */* 灯光闪烁 */*ConfigPWM(10, 5); /PWM 脉冲宽度为 10H乙即 1ms,占 空比 5

5、%ConfigTimer1(50); / 定时 20ms调整 PWM占空比*/while (1);/* 初始化 */void Initial()ADDR3 = 1;ENLED = 0;/ 选择 LEDADDR2 = 1;ADDR1 = 1;ADDRO = 0;/选择LEDS6即流水灯/* 使用定时器 T0 配置 PWM*/void ConfigPWM(unsigned int fr, unsigned char dc) / 参数:fr PWM己置的频率,当是 100时,即是100H乙周 期是 10ms, dc 为占空比unsigned long tmp;unsigned int heigh,

6、low;/ 分别存放高电平计数值和低 电平计数值tmp = 11059200/12;/ 一个机器周期的计数频率PWMCounter = tmp / fr;/ 一个机器周期计数频率是多少个 fr 计数频率,即 fr 频率需要的计数值heigh = (PWMCounter * dc) / 100;/ 高电平所需计数值1/fr 周期内高电平计数值low= PWMCounter - heigh;/ 低电平所需计数值 1/fr 周期内低电平计数值heigh = 65536-heigh;/ 高电平时定时器需要装入的初值low= 65536-low;/ 低电平时定时器需要装入的初值heighHR0 = (u

7、nsigned char)(heigh >> 8);heighLR0 = (unsigned char)heigh;lowHR0= (unsigned char)(low >> 8);lowLR0= (unsigned char)low;TMOD &= 0xF0;/ 清零 T0 控制位TMOD |= 0x01;/Timer0 方式 1,16 位可设定定时模式TH0 = heighHR0;TL0 = heighLR0;/ 装入高电平时的初值PWMOUT = OxFF;/开始PWM输出高电平TR0 = 1;/ 启动定时器 T0ET0 = 1;/ 开启 T0 中断EA

8、 = 1;/ 开总中断/* 配置定时器 Timerl,用于定时xms调整PW啲占空 比*/void ConfigTimer1(unsigned int xms)unsigned long tmp;tmp = 11059200/12;/ 一个机器周期的计数频率tmp = (tmp * xms) /1000; 定时xms需要的计数频率(即 计数次数 )tmp = 65536-tmp;定时xms需要装入的计数初值thr1 = (unsigned char)(tmp >> 8);/取高八位tlr1 = (unsigned char)tmp;TMOD &= 0x0F;/ 清零 T1

9、控制位TMOD |= 0x10;/ 定时器 T1 方式 1,16 位可设定时器TH1 = thr1;TL1 = tlr1;TR1 = 1;/ 启动 timer1ET1 = 1;/ 开启定时器 T1 中断EA = 1;/ 开启总中断/* 调整PWM占空比*/void AdjustPWMdc(unsigned char dc)unsigned int heigh, low;heigh = (PWMCounter * dc) / 100; /PWM脉冲中高脉冲所需计数值low= PWMCounter - heigh;/PWM 脉冲中低脉冲所需的计数值heigh = 65536-heigh;/ 高脉冲

10、装入计数的初值low= 65536-low; / 低脉冲装入计数的初值/* 调整PWM高低脉冲计数初值,来调整PWM勺占空比*/heighHR0 = (unsigned char)(heigh >> 8);heighLR0 = (unsigned char)heigh;lowHR0= (unsigned char)(low >> 8);lowLR0= (unsigned char)low;/* 定时器 Timer0 中断服务 */void Timer0_ISP() interrupt 1/在中断中对PWM勺输出电平进行判断,若当前输出是 高电平,则开始装入低电平的计数初

11、值,PWM输出低电平if (PWMOUT)/TimerO 装入PWM一个周期中低脉冲的计数初值TH0 = lowHR0;TL0 = lowLR0;PWMOUT = OxOO;PWM俞出低电平else / 否则装入高电平的计数初值,俞出高电平/TimerO 装入PWM一个周期中高脉冲的计数初值TH0 = heighHR0;TLO = heighLRO;PWMOUT = OxFF;/PWM俞出高脉冲/* 定时器 Timer1 中断服务 */void Timer1_ISP() interrupt 3/注意:index和dir在每次进入中断后都要使用上一次的值,因此必须定义为静态类型static unsigned char index = O;/占空比索引static bit dir = O;/ 方向位, O 灯光由亮 -> 暗 1 灯光 由暗 -> 亮TH1 = thr1;TL1 = tlr1;Adjust

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论