流水灯控制实验报告

  • 格式: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;