把51的7段數碼管顯示程序移植到ZYNQ上(三)——SDK下的程序調試和結果

經過前面的三個步驟之後,我們在PS部分採用EMIO的方式接出了10位的GPIO到我們的雙路鎖存器,其中低八位[7:0]是我們的輸入數據相當於51的某個P口,高兩位中的第8位用來鎖存顯示碼,第9位用來鎖存選擇碼。先來個效果圖:

接著是代碼

/***************************** Include Files ********************************/nn#include "xparameters.h"n#include "xgpiops.h"n#include "xstatus.h"n#include "xplatform_info.h"n#include <xil_printf.h>nn/************************** Constant Definitions ****************************/nn#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID//PSGPIO的設備號n#define DATA_LATCH_PIN 62 //顯示碼鎖存位的EMIO引腳編號n#define SELECT_LATCH_PIN 63 //選擇碼鎖存位的EMIO引腳編號n#define LED_DELAYtt 10000//延時時間間隔n#define LED_BANK 0x02 /* Output pins BANK */n#define printfttt xil_printft/* Smalller foot-print printf */n/*定義0到F的16進位顯示碼和空顯示碼*/nconst unsigned int Display_Code[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,n 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};n/*定義8個數碼管的選擇碼和空選擇碼*/nconst unsigned int Selected_Code[9]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};n/**************************** Type Definitions ******************************/nn/***************** Macros (Inline Functions) Definitions *******************/nn/************************** Function Prototypes ****************************/nvoid Data_Latch(int data);nvoid Select_Latch(int data);nvoid Display_Blank();n/************************** Variable Definitions **************************/nnXGpioPs Gpio;t/* The driver instance for GPIO Device. */nn/*****************************************************************************/n/**n*n* Main function to call the example.n*n* @paramtNonen*n* @returnt- XST_SUCCESS if the example has completed successfully.n*tt- XST_FAILURE if the example has failed.n*n* @notettNonen*n******************************************************************************/nint main(void)n{ntint Status;ntvolatile int Delay;ntprintf("Start to display the 7segment ledsrn");n XGpioPs_Config *ConfigPtr;n int Type_of_board;n /*Test the target board chip*/n Type_of_board = XGetPlatform_Info();n switch (Type_of_board) {n tcase XPLAT_ZYNQ_ULTRA_MP:n ttprintf("Its a ZYNQ_ULTRA boardrn");n ttbreak;n tcase XPLAT_ZYNQ:n tttprintf("Its a ZYNQ boardrn");n tttbreak;n tt}n /* Initialize the GPIO driver. */n tConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);n tStatus = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,n tttttConfigPtr->BaseAddr);n tif (Status != XST_SUCCESS) {n ttreturn XST_FAILURE;n t}ntXGpioPs_SetDirection(&Gpio,LED_BANK,0xFFFFFF);//設定EMIO的BANK2所有引腳均為輸出ntXGpioPs_SetOutputEnablet(&Gpio,LED_BANK,0xFFFFFF);//允許BANK2的所有引腳輸出ntwhile(1)nt{nttfor(int i=0;i<8;i++)ntt{ntttDisplay_Blank();//消隱,清除所有顯示內容ntttData_Latch(Display_Code[i]);//鎖存顯示碼ntttSelect_Latch(Selected_Code[i]);//鎖存選擇碼ntttfor (Delay = 0; Delay < LED_DELAY; Delay++);ntt}nnnt}ntxil_printf("Successfully ran 7segment leds Examplern");ntreturn XST_SUCCESS;n}n/////////////////////////////////////////////////////////////n//消隱清除顯示內容n/////////////////////////////////////////////////////////////nvoid Display_Blank()n{ntXGpioPs_Write(&Gpio, LED_BANK, Display_Code[16]);//送全零到數據匯流排ntXGpioPs_WritePin(&Gpio,DATA_LATCH_PIN,1);ntXGpioPs_WritePin(&Gpio,DATA_LATCH_PIN,0);//將全零鎖存到AB兩組輸出上ntXGpioPs_Write(&Gpio, LED_BANK, Selected_Code[8]);//送全高到數據匯流排ntXGpioPs_WritePin(&Gpio,SELECT_LATCH_PIN,1);ntXGpioPs_WritePin(&Gpio,SELECT_LATCH_PIN,0);//將全高鎖存到選擇匯流排輸出上n}n/////////////////////////////////////////////////////////////n//鎖存顯示碼n/////////////////////////////////////////////////////////////nvoid Data_Latch(int data)n{ntXGpioPs_Write(&Gpio, LED_BANK, data);//將顯示碼送到數據匯流排上ntXGpioPs_WritePin(&Gpio,DATA_LATCH_PIN,1);ntXGpioPs_WritePin(&Gpio,DATA_LATCH_PIN,0);//將顯示碼鎖存到AB兩組輸出上n}n/////////////////////////////////////////////////////////////n//鎖存選擇碼n/////////////////////////////////////////////////////////////nvoid Select_Latch(int data)n{ntXGpioPs_Write(&Gpio, LED_BANK, data);//將選擇碼送到數據匯流排上ntXGpioPs_WritePin(&Gpio,SELECT_LATCH_PIN,1);ntXGpioPs_WritePin(&Gpio,SELECT_LATCH_PIN,0);//將選擇碼鎖存到選擇匯流排輸出上n}n

最後是視頻:

https://www.zhihu.com/video/897502480374599680

如有問題歡迎評論留言或關注碼峰社嵌入式群541931432進行討論。

推薦閱讀:

ARM裸機1期加強版最新進度(更新時間11月8日)
不如高通835:Anandtech 對華為海思麒麟970 的測試
ARM與中方合資並由中方控股是一招妙棋
加入ARM陣營到底是明智之舉,還是作繭自縛?
ZYNQ有兩個CPU?(三)——SGI非同步通信

TAG:ARM | 嵌入式开发 | 现场可编辑逻辑门阵列FPGA |