邮电大学计算机原理
《流水灯实验》
姓 名 吴挺斌 学 院 信息与通信工程学院 班 级 2017211116 学 号 2017210473
2019年 5月 18日
一. 实验目的
1. 掌握 ARM 开发工具的使用。 2. 掌握基本 IO 的使用。
二.实验要求
设计并实现一个流水灯系统,具体要求如下: 系统上电时,八个 LED 灯从左至右间隔 100ms 依次点亮,类似流水效果,前一个 LED 灯点亮然后熄灭时点亮下一个 LED 灯,循环往复。
实验任务
1)基础部分(必做实验)
1)C 语言编程实现一个流水灯实验 2)汇编语言编程实现一个流水灯实验 2. 提高部分(选做实验)
1)C 语言编程控制七段数码管显示自己的学号
三.基础实验功能实现
3.1基础实验:在跑通流水灯的代码后,我尝试进行实验修改:通过设置合理时延和循环检查并修改相关变量,将八个LED灯从左到右依次点亮修改成为将八个LED灯由亮以此熄灭,然后循环往复。
3.2基础实验程序流程图:
将led_data赋值为0xff(设置全亮) 开始 点亮 yes led_data=led_data-cont;依次熄灭 NO 判断led_data=0? 3.3.基础实验程序代码
#include \#include \int main(void) {
uint8_t cont = 1;
uint16_t led_data = 0XFF;
GPIO_InitTypeDef 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_InitStructure.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; //控制依次熄灭 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, 0x5B, 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(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:
计算机原理第一次实验



