1、 计算机原理第一次实验 精品资料 北京邮电大学计算机原理 《流水灯实验》 姓 名 吴挺斌 学 院 信息与通信工程学院 班 级 2017211116 学 号 2017210473 2019年 5月 18日 一. 实验目的 1. 掌握 ARM 开发工具的使用。 2. 掌握基本 IO 的使用。 二.实验要求 设计并实现一个流水灯系统,具体要求如下: 系统上电时,八个 LED 灯从左至右
2、间隔 100ms 依次点亮,类似流水效果,前一个 LED 灯点亮然后熄灭时点亮下一个 LED 灯,循环往复。 实验任务 1)基础部分(必做实验) 1)C 语言编程实现一个流水灯实验 2)汇编语言编程实现一个流水灯实验 2. 提高部分(选做实验) 1)C 语言编程控制七段数码管显示自己的学号 三.基础实验功能实现 3.1基础实验:在跑通流水灯的代码后,我尝试进行实验修改:通过设置合理时延和循环检查并修改相关变量,将八个LED灯从左到右依次点亮修改成为将八个LED灯由亮以此熄灭,然后循环往复。 3.2基础实验程序流程图: 开始
3、将led_data赋值为0xff(设置全亮) 点亮 yes led_data=led_data-cont;依次熄灭 NO判断led_data=0? 3.3.基础实验程序代码 #include "stm32f4xx.h" #include "delay.h" int main(void) { uint8_t cont = 1; uint16_t led_data = 0XFF; GPIO_In
4、itTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); //开启GPIOF的时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructu
5、re.GPIO_Speed = GPIO_Medium_Speed; //速率2.5MHz GPIO_Init(GPIOF, &GPIO_InitStructure); GPIO_Write(GPIOF, 0x00FF); Delay_Init(); //延时初始化 while(1) { if(cont==1) { GPIO_Write(GPIOF,led_data); //全部点亮 Delay_Ms(3000); } led_data=led_data-cont;
6、//控制依次熄灭 GPIO_Write(GPIOF,led_data); cont=cont*2; Delay_Ms(3000); if(led_data==0x0000) //检测是否全部熄灭 { led_data=0x00ff; cont=1; } } } 四.提高实验功能实现 4.1提高实验:C 语言编程控制七段数码管显示自己的学号。 4.2实验效果截图: 4.3实验代码 //显示17210473 uint8_t digivalue[] = {0x06, 0x07, 0x
7、5B, 0x06, 0x3F, 0x66, 0x07, 0x4F}; //函数 void SMG_Sele(uint8_t index) { HC595_Send(digivalue[index]); switch(index) { case 0: HC138_C(0); HC138_B(0); HC138_A(0); break; case 1: HC138_C(0); HC138_B(0); HC138_A(1); break; case 2: HC138_C
8、0); HC138_B(1); HC138_A(0); break; case 3: HC138_C(0); HC138_B(1); HC138_A(1); break; case 4: HC138_C(1); HC138_B(0); HC138_A(0); break; case 5: HC138_C(1); HC138_B(0); HC138_A(1); break; case 6: HC138_C(1); HC138_
9、B(1); HC138_A(0); break; case 7: HC138_C(1); HC138_B(1); HC138_A(1); break; default: break; } } //主程序 int main(void) { uint8_t i; Delay_Init(); //延时初始化 SMG_Init(); //数码管初始化 while(1) { SMG_Sele(i); //数码管显示数据 i++; i &= 0x07; } } //end file 五.实验总结和心得 通过设置变量对二进制数进行循环检查和运算实现了本次流水灯的扩展和基础实验。 这是第一次微机原理的硬件实验,通过本次实验熟悉了实验系统,学习了最基本的硬件测试,对微机的驱动有了基本的了解。 合理设置实验非常重要,在实现LED灯由全亮到以此熄灭的过程中发现并没有观察到全亮现象,仔细检查代码后没有发现问题。最后发现原来是刚开始运行代码时候没有设置合理时延,导致全亮快速闪过以至于肉眼观察不到。 仅供学习与交流,如有侵权请联系网站删除 谢谢8






