5路PWM的单片机电路和程序.doc

上传人:bao****ty 文档编号:132395588 上传时间:2020-05-15 格式:DOC 页数:271 大小:1.15MB
返回 下载 相关 举报
5路PWM的单片机电路和程序.doc_第1页
第1页 / 共271页
5路PWM的单片机电路和程序.doc_第2页
第2页 / 共271页
5路PWM的单片机电路和程序.doc_第3页
第3页 / 共271页
5路PWM的单片机电路和程序.doc_第4页
第4页 / 共271页
5路PWM的单片机电路和程序.doc_第5页
第5页 / 共271页
点击查看更多>>
资源描述

《5路PWM的单片机电路和程序.doc》由会员分享,可在线阅读,更多相关《5路PWM的单片机电路和程序.doc(271页珍藏版)》请在金锄头文库上搜索。

1、现开发了可以同时控制24V直流三色灯板,按触摸屏顺序点亮的电路和程序,供大家参考。电路为单片机ATMEGA128控制5路PWM方波,按照74HC08逻辑编码输出15路PWM信号,一次按照迪文触摸屏点亮3种颜色灯板的5路发光信号。ULN2003提供12V电压。每个灯板通过一个CMOS管IR3205输出功率。一个74HC08通过一路PWM,这路PWM通过74HC08控制的继电器控制IR3205的开关,进而控制24V,13V,36V灯板的开关,灯板的亮度通过PWM波形的占空比调节电路的PCB如下上面是单片机PCB,它和灯板PCB通过排线连接上面是灯板PCB。下面是单片机程序,程序用ICC-AVR开发

2、,/ICC-AVR application builder : 2010-6-22 15:14:03/ Target : M64A/ Crystal: 4.0000Mhz/*修改宏定义以实现不同功能,*/#include main.h/*向串口1发送单个数据,查询方式*/void TxUart1(unsigned char i) /CLI(); /disable all interrupts/DelayMs(1);while (!(UCSR0A & (1UDRE0);/* 等待发送缓冲器为空*/UDR0 = i; /* 发送数据*/ /SEI(); /re-enable interrupts/

3、*向串口0发送数组,查询方式参数1:数组指针;参数2:数组长度;*/void TxArrayUart1(unsigned char *ptr,unsigned char number) /CLI(); /disable all interruptsuchar i;for(i = 0; i number; i+) TxUart1(ptri); /SEI(); /re-enable interrupts/*向串口1发送单个数据,查询方式*void TxUart1(unsigned char i) /CLI(); /disable all interruptswhile (!(UCSR1A & (1

4、UDRE1);/等待发送缓冲器为空UDR1 = i; /发送数据 /SEI(); /re-enable interrupts/*向串口0发送数组,查询方式参数1:数组指针;参数2:数组长度;*void TxArrayUart1(unsigned char *ptr,unsigned char number) /CLI(); /disable all interruptsuchar i;for(i = 0; i number; i+) TxUart1(ptri); /SEI(); /re-enable interrupts/*数据接收,等待查询方式*/unsigned char uart_rec

5、eive1(void) while (!(UCSR1A & (1RXC1);/* 等待接收数据*/return UDR1;/* 获取并返回数据*/UART0 initialize/ desired baud rate: 9600/ actual: baud rate: 9615 (0.2%)/ char size: 8 bit/ parity: Disabledvoid uart0_init(void) UCSR0B = 0x00; /disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x0C; /se

6、t baud rate lo UBRR0H = 0x00; /set baud rate hi UCSR0B = 0x98;#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXCvoid uart0_rx_isr(void) /uart has received a character in UDR uart1_data = UDR0; switch (uart1_counter) case 0: if (uart1_data = 0xaa) uart1_counter +; else uart1_counter = 0; break; cas

7、e 1: if (uart1_data = 0x78) | (uart1_data = 0x79) uart1_counter +; else uart1_counter = 0; button_type = uart1_data; break; case 2: if (uart1_data = 0x00) uart1_counter +; else uart1_counter = 0; break; case 3: uart1_counter +; button = uart1_data; break; case 4: if (uart1_data = 0xcc) uart1_counter

8、 +; else uart1_counter = 0; break; case 5: if (uart1_data = 0x33) uart1_counter +; else uart1_counter = 0; break; case 6: if (uart1_data = 0xc3) uart1_counter +; else uart1_counter = 0; break; case 7: uart1_counter = 0; if (uart1_data = 0x3c) switch(button) case 0x57: case 0x58: case 0x63: if(button

9、_time = 0) button_flag = 1; button_time = 110; break; default: if(button_time = 0) & (button_type = 0x78) button_flag = 1; break; break; default: uart1_counter = 0; break; /*#pragma interrupt_handler uart1_rx_isr:iv_USART1_RXCvoid uart1_rx_isr(void) /uart has received a character in UDR uart1_data =

10、 UDR1; switch (uart1_counter) case 0: if (uart1_data = 0xaa) uart1_counter +; else uart1_counter = 0; break; case 1: if (uart1_data = 0x78) | (uart1_data = 0x9b) uart1_counter +; else uart1_counter = 0; break; case 2: if (uart1_data = 0x00) | (uart1_data = 0x5a) uart1_counter +; if(uart1_data = 0x5a

11、) time_get = 1; else uart1_counter = 0; break; case 3: if(time_get) timetime_get - 1 = uart1_data; if(time_get 6) time_get +; else /time_get = 0; uart1_counter +; else uart1_counter +; button = uart1_data; break; case 4: if (uart1_data = 0xcc) uart1_counter +; else uart1_counter = 0; break; case 5: if (uart1_data = 0x33) uart1_counter +; else uart1_counter = 0; break; case 6: if (uart1_data = 0xc3) uart1_counter +; else uart1_counter = 0; break; case 7:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号