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