流水灯控制实验报告
- 格式:docx
- 大小:112.12 KB
- 文档页数:8
《电子与控制系统设计》实验报告
实验项目名称: LED 灯的移动控制
指导老师: 元泽怀
完成时间: 2015年 9月 22日
姓名: 刘文开
班级: 12 电气 1班
学号: 201224122116
成绩:
电子信息与机电工程学院 编制
实验
项目
LED 灯的移动控制
验证
实验项目类型
演示 综合 设计
其他
*
一、实验目的
1. 熟悉 IO 接口的设置与应用; 2. 进一步熟悉编译软件和下载软件的使用; 3. 熟悉单片机 C 语言中移位、延时、数组等语句的应用; 4. 熟悉单片机 C 语言开发过程。
二、实验内容
1. 编写一程序, 实现如下功能: 每按一次 S1 键, 8 个发光二极管顺序点亮 1 个;
同样每按下 S2 键一次, 8 个发光二极管逆序点亮 1 个, 实验电路原理
图如下图 1 所示。实现发光二极管循环点亮的按键控制。
2. 设计一个完整程序 (另建一个 project ) , 实现 8 个 led 灯的自动顺序
(加法) 点亮和逆序(减法)点亮。
图 1 实验原理图
三、使用仪器设备及材料
1、安装 windows xp 操作系统的微型计算机 1 台
2、AVR单片机 C语言集成开发环境 ICCAVR6.31A
3、单片机仿真平台 proteus7.5
4、AVR单片机下载软件 progisp
5、AVR单片机实验板 1 套(含下载器)
四、实验过程原始记录
1、硬件仿真电路
( 1)在实验室电脑 E 盘“ 12 电气 1 班 刘文开”文件夹里新建一个文件名为
“ test1 ”的文件夹。
( 2)打开 protues 仿真软件,根据图 1 设计出试验仿真图, 命名为“test1.DSN ”
保存到上述“ test 的文件夹里”。
U1 9 RESET PC0/SCL 22
23 PC1/SDA 12 24 XTAL1 PC2/TCK 13 25 XTAL2 PC3/TMS 26 PC4/TDO 40 27 PA0/ADC0 PC5/TDI 39 28 PA1/ADC1 PC6/TOSC1 38 29 PA2/ADC2 PC7/TOSC2 37
PA3/ADC3
36 14 PA4/ADC4 PD0/RXD 35 15 PA5/ADC5 PD1/TXD 34 16 PA6/ADC6 PD2/INT0 33 17 U2 PA7/ADC7 PD3/INT1 18 PD4/OC1B 1 20 1 19 PB0/T0/XCK PD5/OC1A 2 19 2 20 PB1/T1 PD6/ICP1 3 18 3 21 PB2/AIN0/INT2 PD7/OC2 4 17 4
PB3/AIN1/OC0
5 16 5
PB4/SS
6 15 6
PB5/MOSI
7 14 7 32 PB6/MISO AREF 8 13 8 30 PB7/SCK AVCC 9 12
10 11ATMEGA16
LED-BARGRAPH-RED
图 2 实验仿真电路图
9 U1
22 RESET PC0/SCL 23 PC1/SDA 12 24 XTAL1 PC2/TCK 13 25 XTAL2 PC3/TMS 26 PC4/TDO 40 27 PA0/ADC0 PC5/TDI 39 28 PA1/ADC1 PC6/TOSC1 38 29 PA2/ADC2 PC7/TOSC2 37
PA3/ADC3
36 14 PA4/ADC4 PD0/RXD 35 15 PA5/ADC5 PD1/TXD 34 16 PA6/ADC6 PD2/INT0 33 17 U2 PA7/ADC7 PD3/INT1 18 PD4/OC1B 1 20 1 19 PB0/T0/XCK PD5/OC1A 2 19 2 20 PB1/T1 PD6/ICP1 3 18 3 21 PB2/AIN0/INT2 PD7/OC2 4 17 4
PB3/AIN1/OC0
5 16 5
PB4/SS
6 15 6
PB5/MOSI
7 14 7 32 PB6/MISO AREF 8 13 8 30 PB7/SCK AVCC 9 12
10 11 ATMEGA16
LED-BARGRAPH-RED
图 3 实验仿真电路图
2、程序流程图
(1) .LED 控制移动流程图:
开始
初始化、定义 I/O 端口
Y
N
S1 按下?
Y
计数器 counter++
Counter>8?
Y
第一个 LED
灯点亮
是否有按键按 Y
下?
S2 按下?
Y
计数器 counter--
Counter<0?
N Y
最后一个
下一个 LED
灯点亮 LED 灯点亮
N
上一个 LED灯
点亮
2).LED 自动循环流程图:
开始
初始化、定义 I/O 口
i = 0
i = i+1
N
i<8?
Y
PORTB=~(1<
3、软件主要程序及注解
(1). 移动控制程序:
#include
#define uchar unsigned char
#define uint unsigned int
uchar temp;
//******* 延时函数 ********//
void delay_ms(uint k)
{
i = i - 1
N
i>0?
Y
PORTB=~(1< uint i,j; for(i=0;i { for(j=0;j<1140;j++); } } //***************** 端口设置函数 ********************// void port_init(void) { DDRB = 0xFF; //B 端口设置为输出 PORTD = 0XFF; // 输出高电平 DDRD = 0x00; //D PORTD = 0XFF; // 端口设置为输入 输出高电平 } //********* 主函数 *********// void main(void) { char counter=0; // port_init(); while(1) 计数器 // 调用端口函数 { if((PIND&0x10)==0) { if(++counter>8) counter=1; delay_ms(300); } if((PIND&0x20)==0) { counter = counter--; if(--counter<1) counter=8; delay_ms(300); } switch(counter) { case 1: PORTB=0xfe;break; case 2: PORTB=0xfd;break; case 3: PORTB=0xfb;break; case 4: PORTB=0xf7;break; case 5: PORTB=0xef;break; case 6: PORTB=0xdf;break; case 7: PORTB=0xbf;break;