基于ZYNQ的嵌入式学习笔记二(7段数码管显示我的生日)

一、七段数码管电路原理:

基于ZYNQ的嵌入式学习笔记二(7段数码管显示我的生日)_第1张图片

从图 可知要让某个数字亮起必须满足两个逻辑条件:
1. 对应的 LED_SEL 必须为’0’;
2. 代表对应笔画的 LEDX_BUSX 必须为’1’;
例如需要最左边的数码管亮起数字 0,则首先必须让 LED_SEL0 为’0’,然后
LED0_BUS 上对应的 8 位二进制数应该为”00111111”,换算成 16 进制就是 0x3F。因此在 3
个 8 位总线上 LED0_BUS 输出 0x3F,LED1_BUS 输出 0,LED_SEL 输出 0xFE 即可让最
左边的 7 段数码管亮起数字 0。

即显示顺序是从“日”字最上面一横开始,顺时针绕一圈,中间一横然后点是最后一位。

 

二、在Vivado中进行Block Design,生成HDL,综合,生成bit流文件并Export之后,在SDK中写入C语言部分,静态显示的代码如下:

连接七段数码管的GPIO由于上次用的是AXI GPIO,这次采用的是EMIO的方式。24位EMIO从低位到高位依次为LED0 BUS[0-7],LED1 BUS[0-7],LED SEL[0-7]。

三、代码:

#include 
#include "xparameters.h" //硬件参数定义头文件
#include "platform.h"    //平台定义头文件
#include "xil_printf.h"  //串口输出库函数头文件
#include "xgpiops.h"     //PS部分GPIO库函数头文件
#include "xstatus.h"     //状态代码定义头文件

#define GPIO_DEVICE_ID  XPAR_XGPIOPS_0_DEVICE_ID //在xparameters.h中找到EMIO对应ID
#define LED_DELAY 100000
#define LED 0x01 //一次点亮1bit
#define LED_BANK 0x02 //输出的pins bank

static int emerge_ledbus(int ledbus0,int ledbus1,int ledsel);
XGpioPs Gpio; //GPIO驱动实例化

int main(void)
{
   int Status;
   int led_bus0[8]={0x5B,0x3F,0x06,0x7F,0x00,0x00,0x00,0x00};
   int led_bus1[8]={0x00,0x00,0x00,0x00,0x06,0x5B,0x06,0x6D};
   int led_sel=0x01;
   xil_printf("Start to display the 7segment leds\r\n");
   XGpioPs_Config *ConfigPtr;
   int Type_of_board;
   /*获取板子信息*/
   switch(Type_of_board) {
   case XPLAT_ZYNQ_ULTRA_MP:
   printf("It's a ZYNQ_ULTRA board\r\n");
   break;
   case XPLAT_ZYNQ:
   printf("It's a ZYNQ board\r\n");
   break;
   }
   /*初始化GPIO驱动*/
ConfigPtr=XGpioPs_LookupConfig(GPIO_DEVICE_ID);//找到ID对应的设备
Status=XGpioPs_CfgInitialize(&Gpio,ConfigPtr,ConfigPtr->BaseAddr);
if(Status!=XST_SUCCESS){
	return XST_FAILURE;
}
XGpioPs_SetDirection(&Gpio,LED_BANK,0xFFFFFF);//设置全1为输出,这和AXI GPIO中刚好相反
XGpioPs_SetOutputEnable(&Gpio,LED_BANK,0xFFFFFF);//1是允许
while(1)
{
	for(int i=0;i<8;i++){
		XGpioPs_Write(&Gpio,LED_BANK,emerge_ledbus(0,0,0xFF));//熄灭的所有灯
		XGpioPs_Write(&Gpio,LED_BANK,emerge_ledbus(led_bus0[i],led_bus1[i],(led_sel<<1)));
		for(int Delay=0;Delay

最后数码管上轮流动态显示出来的就是我的生日2018-12-15啦,新的一岁真的要继续冲鸭,咸鱼也得挣扎一下。

你可能感兴趣的:(基于ZYNQ的嵌入式学习笔记二(7段数码管显示我的生日))