一、实验目的及要求
1、 学会如何将3个端口内每个对应的位组合在一起,形成一个控制字,用来定义相应I/O口位的输入输出状态和方式。
2、 学会用按键控制LED灯的图案变化。
3、 将IOA作为按键输入,IOB输出到LED。通过按键的设定来展示出不同的LED花样效果来,花样可如下:
(a)所有八个LED循环闪烁;
(b)依次点亮一个LED,从左至右循环; (c)依次点亮一个LED,从右至左循环; (d)依次点亮两个LED,从左至右循环; (e)其余可自由发挥。
二、仪器用具 仪器名称 装有μ’nSP™ IDE仿真环境的PC机 μ’nSP™十六位单片机实验箱 连接I/O口的排线 规格/型号 数量 1 1 2 备注 三、实验方法与步骤
1、根据实验内容连接硬件电路并检查。 2、画流程图并编写程序代码。 3、编译程序,软件调试。
4、通过硬件调试完成实验要求。
四、硬件设备
五、实验程序流程图和源程序
程序流程图:
开始 设置IOA作为输入按键 设置IOB输出到LED 按键扫描,获取键判断键值? 通过判断返回值执行花样的子函数 结束 实验程序:
#include\"spce061A.h\"
unsigned int saomiao(void); void delay(void); void youyi(void); void zuoyi(void); void lwyouyi(void); void lwzuoyi(void); void xiangw(void); void xiangn(void);
int main(void) {
unsigned int key=0,temp=0;
*P_IOA_Dir=0xffff; *P_IOA_Attrib=0xffff; *P_IOA_Data=0x0000; *P_IOB_Dir=0x0000; *P_IOB_Attrib=0x0000; *P_IOB_Data=0x0000;
while(1) {
temp=saomiao(); if(temp!=0) {
key=temp; }
switch(key) {
case 1: zuoyi();break; case 2: youyi();break; case 3: lwyouyi();break; case 4: lwzuoyi();break; case 5: xiangw();break; case 6: xiangn();break; default:break; } } }
unsigned int saomiao(void)//按键扫描子函数 {
unsigned int n;
if(*P_IOB_Data==0x0001) n=1;
else if(*P_IOB_Data==0x0002) n=2;
else if(*P_IOB_Data==0x0004) n=3;
else if(*P_IOB_Data==0x0008) n=4;
else if(*P_IOB_Data==0x0010) n=5;
else if(*P_IOB_Data==0x0020) n=6; else
n=0; return n; }
void zuoyi(void) //花样左移子函数 {
unsigned int i; for(i=1;i<=128;) {
*P_IOA_Data=i; i=i*2; delay();
*P_Watchdog_Clear=0x0001; } }
void youyi(void)//花样右移子函数 {
unsigned int i; for(i=128;i>=1;) {
*P_IOA_Data=i; i=i/2;//i>>=1; delay();
*P_Watchdog_Clear=0x0001; } }
void lwzuoyi(void)//花样两位左移子函数 {
unsigned int i; for(i=3;i<=192;)
{
*P_IOA_Data=i; i=i*2;//i<<=1; delay();
*P_Watchdog_Clear=0x0001; } }
void lwyouyi(void)//花样两位右移子函数 {
unsigned int i; for(i=192;i>=3;) {
*P_IOA_Data=i; i=i/2; //i>>=1; delay();
*P_Watchdog_Clear=0x0001; } }
void xiangw (void) //花样由内向外移动 {
unsigned int i,j;
for(i=16,j=8;i<=128,j>=1;) {
*P_IOA_Data=i+j; i=i*2;//i<<=1; j=j/2;//j>>=1; delay();
*P_Watchdog_Clear=0x0001; } }
void xiangn (void) //花样由外向内移动 {
unsigned int i,j;
for(i=1,j=128;i<=8,j>=16;) {
*P_IOA_Data=i+j; i=i*2;//i<<=1; j=j/2;//j>>=1; delay();
*P_Watchdog_Clear=0x0001; } }
void delay(void)//延时函数 {
unsigned int i,j; for(i=0;i<100;i++) {
for(j=0;j<100;j++)
*P_Watchdog_Clear=0x0001; } }
六、实验现象
1、当按键1按下时:LED流水灯向左移动; 2、当按键2按下时:LED流水灯向右移动;
3、当按键3按下时:LED流水灯向右每次移动两位; 4、当按键4按下时:LED流水灯向左每次移动两位; 5、当按键5按下时:LED流水灯由内向外移动; 6、当按键6按下时:LED流水灯由外向内移动;
七、实验收获
通过对流水灯控制实验的完成,基本掌握了凌阳单片机I/O口的参数设置方
法。
基本掌握了按键的设置和使用方法。
在控制流水花色变化的程序实现中,学会了左移与右移的两种算术和逻辑操
作方法。
基本掌握了程序的在线仿真操作方法。
基本掌握了硬件按键与流水灯之间线路的连接。
在程序的编写与调试过程中,学会了要用细心和谨慎的态度来完场实验的各
个环节。
因篇幅问题不能全部显示,请点此查看更多更全内容