![單片機產(chǎn)品設(shè)計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告4-HAL答案_第1頁](http://file4.renrendoc.com/view12/M0B/15/35/wKhkGWdW5vWACMEyAABQUCxfTgo195.jpg)
![單片機產(chǎn)品設(shè)計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告4-HAL答案_第2頁](http://file4.renrendoc.com/view12/M0B/15/35/wKhkGWdW5vWACMEyAABQUCxfTgo1952.jpg)
![單片機產(chǎn)品設(shè)計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告4-HAL答案_第3頁](http://file4.renrendoc.com/view12/M0B/15/35/wKhkGWdW5vWACMEyAABQUCxfTgo1953.jpg)
![單片機產(chǎn)品設(shè)計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告4-HAL答案_第4頁](http://file4.renrendoc.com/view12/M0B/15/35/wKhkGWdW5vWACMEyAABQUCxfTgo1954.jpg)
![單片機產(chǎn)品設(shè)計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告4-HAL答案_第5頁](http://file4.renrendoc.com/view12/M0B/15/35/wKhkGWdW5vWACMEyAABQUCxfTgo1955.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGE19《單片機產(chǎn)品設(shè)計與制作》項目報告項目4、利用外部中斷實現(xiàn)工件計數(shù)顯示姓名:學號:
一、項目目標理解中斷的基本概念;會利用STM32外部中斷進行電路設(shè)計和程序設(shè)計,實現(xiàn)相應的功能。二、具體工作任務(wù)利用STM32單片機外部中斷,設(shè)計工件計數(shù)顯示裝置,進行方案設(shè)計、器件選型、電路和程序設(shè)計,完成軟硬件調(diào)試,實現(xiàn)如下功能:生產(chǎn)線上每過一個工件,計數(shù)值加1,計數(shù)范圍0~99,十進制顯示。三、要點記錄及成果檢驗任務(wù)4.1方案設(shè)計姓名學號日期分數(shù)(一)要點記錄1、請畫出系統(tǒng)方框圖。2、簡述常見光電傳感器的分類及原理。對射式光電傳感器將發(fā)射器和接收器對側(cè)安裝。沒有工件時,接收器收到發(fā)射器發(fā)出的光;有工件時,光被工件阻擋,接收器收不到光。鏡反射式光電傳感器將發(fā)射器和接收器同側(cè)安裝。沒有工件時,發(fā)送器的光被反射鏡反射給接收器;有工件時,光被工件吸收,接收器收不到光。漫反射式光電傳感器發(fā)射器和接收器也是同側(cè)安裝。沒有工件時,發(fā)送器的光射向遠處,接收器接收不到光;有工件時,光被工件表面反射回來,接收器收到光。
任務(wù)4.2電路設(shè)計與測試姓名學號日期分數(shù)1、如果用PE3接收傳感器輸入,數(shù)碼管采用動態(tài)顯示,573驅(qū)動,共陰極數(shù)碼管,PD7~PD0接數(shù)碼管段碼,PD8和PD9作為位選信號。請畫出完整電路(電源、外部高速晶振、外部低速晶振、啟動、傳感器、數(shù)碼管)。任務(wù)4.3查詢法程序設(shè)計與調(diào)試姓名學號日期分數(shù)1、用PE4接收傳感器輸入,傳感器程序怎么改?Sensor.h#ifndef_SENSOR_H#define_SENSOR_H#include"sys.h" //位帶操作頭文件#include"SysTick.h" //滴答時鐘頭文件#defineSensor PEin(4)//為PE4起名SensorvoidSensor_Init(void); //傳感器初始化函數(shù)voidSensor_Scan(void); //傳感器掃描函數(shù)#endifSensor.c#include"sensor.h"staticu8Sensor_Last; //存儲sensor上一次的值staticu8Workpiece; //存儲工件數(shù)值(范圍0~99)/#include"sensor.h"staticu8Sensor_Last; //上一次的檢測值externu8Workpiece; //工件數(shù)(范圍0~99)voidSensor_Init(void) //傳感器初始化函數(shù){GPIO_InitTypeDefGPIO_Initure; //定義GPIO初始化變量__HAL_RCC_GPIOE_CLK_ENABLE();//開啟GPIOE時鐘GPIO_Initure.Pin=GPIO_PIN_4;//Pin2GPIO_Initure.Mode=GPIO_MODE_INPUT; //輸入//GPIO_Initure.Pull=GPIO_NOPULL; //浮空輸入 GPIO_Initure.Pull=GPIO_PULLUP; //上拉輸入HAL_GPIO_Init(GPIOE,&GPIO_Initure); //按照以上設(shè)置初始化PE2 Sensor_Last=1; //傳感器上次輸入=1 Workpiece=0; //傳感器當前檢測值=0}/***************傳感器采集與處理程序***********************功能:采集Sensor輸入,每來一個工件,結(jié)果+1;*輸入:無*輸出:工件數(shù),u8類型***************傳感器采集與處理程序***********************/u8Sensor_Scan(void){ if(Sensor!=Sensor_Last) //如果Sensor當前值和上一次不相等,說明輸入狀態(tài)發(fā)生改變 { if(Sensor==0) {Workpiece+=1;}//如果是下降沿,則工件數(shù)+1 Sensor_Last=Sensor; //無論是下降沿還是上升沿,將Sensor_Last刷新為當前值 delay_ms(10); //延時去抖 } if(Workpiece>99)Workpiece=0; //限制Workpiece在0~99范圍 return(Workpiece); //返回Workpiece的值}2、如果用圖4.2.4數(shù)碼管動態(tài)顯示電路,數(shù)碼管程序怎么改?Seg.c#include"seg.h"u8smg_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9的共陽極數(shù)碼管段碼表//u8smg_table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9的共陰極數(shù)碼管段碼表voidSeg_Init() //數(shù)碼管初始化函數(shù){ GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO初始化變量 __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時鐘 __HAL_RCC_GPIOD_CLK_ENABLE(); //開啟GPIOD時鐘 GPIO_InitStructure.Pin=SEG_Pin; //段碼引腳 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH; //輸出速度為高 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出Out_PP HAL_GPIO_Init(SEG_Port,&GPIO_InitStructure); //按照以上設(shè)置初始化段碼線 HAL_GPIO_WritePin(SEG_Port,SEG_Pin,GPIO_PIN_SET); //段碼線全部輸出1 GPIO_InitStructure.Pin=BS_Pin; //位選引腳 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH; //輸出速度為高 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出Out_PP HAL_GPIO_Init(BS_Port,&GPIO_InitStructure); //按照以上設(shè)置初始化位選線 Tens_S=0;Ones_S=0; //十位和個位都不選通 }/****************數(shù)碼管顯示程序*********************功能:00~99數(shù)碼管顯示*輸入:Data——待顯示數(shù)字,u8類型,范圍0~99*輸出:無***************************************************/voidSeg_Disp(u8Data){ u8Tens,Ones, Seg_Tens,Seg_Ones; u16Disp_Data; Tens=Data/10; //求待顯示數(shù)字的十位數(shù) Ones=Data%10; //求待顯示數(shù)字的個位數(shù) Seg_Tens=smg_table[Tens]; //求十位數(shù)的段碼 Seg_Ones=smg_table[Ones]; //求個位數(shù)的段碼 Disp_Data=0xfc00+Seg_Tens; //將十位段碼整合成16位數(shù)據(jù)SEG_Port->ODR=Disp_Data;//將整合后的十位數(shù)段碼送顯示端口Tens_S=1;//選通十位,十位數(shù)碼管顯示delay_ms(20);//延時Tens_S=0;//禁止十位Disp_Data=0xfc00+Seg_Ones; //將個位段碼整合成16位數(shù)據(jù) SEG_Port->ODR=Disp_Data; //將整合后的個位數(shù)段碼送顯示端口Ones_S=1;//選通個位,個位數(shù)碼管顯示delay_ms(20);//延時Ones_S=0;//禁止個位}Seg.h#ifndef_SEG_H #define_SEG_H #include"sys.h" //位帶操作頭文件 #include"SysTick.h" //滴答時鐘頭文件 #defineSEG_Port GPIOC //給段碼線所在端口起名(只用低8位) #defineSEG_Pin GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3\ |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 //給段碼引腳統(tǒng)一起名 #defineBS_Port GPIOD //給位選線所在端口起名(只用低2位) #defineBS_Pin GPIO_PIN_0|GPIO_PIN_1 //給位選引腳統(tǒng)一起名 #defineTens_S PDout(0) //給十位選通引腳起名 #defineOnes_S PDout(1) //給個位選通引腳起名 voidSeg_Init(void); //數(shù)碼管初始化函數(shù) voidSeg_Disp(u8data); //數(shù)碼管動態(tài)顯示函數(shù)#endif任務(wù)4.3中斷法程序設(shè)計姓名學號日期分數(shù)英文翻譯Interrupt中斷NVIC(NestedVectoredInterruptController)嵌套的中斷向量控制器EXTI(EXternInterruptLine)外部中斷線EXTI0_IRQHandler外部中斷0處理(程序)PendingBit掛起位Event事件AFIO(AlternateFunctionInputOutput)輸入輸出引腳復用功能EXTI_Trigger_Falling/Rising外部中斷下降沿(上升沿)觸發(fā)EXTI_Init外部中斷初始化(庫函數(shù))NVIC_IRQChannelNVIC中斷請求通道NVIC_IRQChannelPreemptionPriorityNVIC中斷請求搶占優(yōu)先級NVIC_IRQChannelSubPriorityNVIC中斷請求副優(yōu)先級(響應優(yōu)先級)NVIC_InitNVIC初始化(庫函數(shù))概念明析STM32的中斷電路包括處于內(nèi)核的NVIC電路和內(nèi)核外的中斷電路兩大部分。Cortex-M3最多支持256個中斷源,即256種中斷。但STM32F103ZET6只支持70個.上電復位后絕大多數(shù)中斷都是被禁止的,但可以通過編程設(shè)置為允許。STM32為不同的中斷規(guī)定了專門的入口地址,也規(guī)定了專門的中斷服務(wù)程序名。EXTI0~EXTI4的中斷函數(shù)名是獨立的,分別為EXTI0_IRQHandler()~EXTI4_IRQHandler()。EXTI5~EXTI9共用一個中斷函數(shù)名EXTI9_5_IRQHandler()EXTI10~EXTI15共用一個中斷函數(shù)名EXTI15_10_IRQHandler()Cortex-M3的NVIC最大支持128層嵌套,STM32只使用到16層,即STM32最多允許16層嵌套。優(yōu)先級數(shù)值越小,優(yōu)先級越高STM32的優(yōu)先級包含了搶占優(yōu)先級、響應優(yōu)先級(副優(yōu)先級)和優(yōu)先級排位三個概念。搶占優(yōu)先級高者既可以優(yōu)先響應,也可以嵌套。響應優(yōu)先級高者只允許優(yōu)先響應,不允許嵌套。優(yōu)先級排位高者只允許優(yōu)先響應,不允許嵌套。STM32F10x支持20個EXTI線中斷。EXTIx中斷必須從PAx或者PBx或者PCx等所有尾號為x的GPIO引腳輸入STM32F10x允許的中斷觸發(fā)信號有三種:上升沿、下跳沿、沿EXTI線中斷請求掛起位PendingBit可以硬件置1,但需要軟件清除。中斷模式會觸發(fā)中斷服務(wù)程序(軟件)的運行,而事件只會觸發(fā)某個硬件電路的某種動作。設(shè)計檢驗如果用PA0接收傳感器輸入,電路怎么畫?程序怎么編?main.c#include"seg.h" //數(shù)碼管定義頭文件#include"sys.h" #include"SysTick.h"#include"exti.h" //外部中斷頭文件u8 Workpiece; //定義全局變量,用于存儲設(shè)定值intmain(){ HAL_Init(); EXTI_Init(); //初始化EXTI Seg_Init(); //初始化數(shù)碼管 Stm32_Clock_Init(RCC_PLL_MUL9); SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為72MHz while(1) { //Workpiece=Sensor_scan(); Seg_Disp(Workpiece); //將工件數(shù)送數(shù)碼管進行數(shù)值顯示 }}exti.h#ifndef_EXTI_H#define_EXTI_H #include"sys.h" #include"SysTick.h" voidEXTI_Init(void); //中斷線初始化 #endifexti.c#include"exti.h"externu8Workpiece; //定義外部變量,用于存儲工件數(shù)值(范圍0~99)/****中斷初始化函數(shù)*********************************************************/voidEXTI_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) __HAL_RCC_GPIOA_CLK_ENABLE();//開啟GPIOA時鐘 /**********GPIOE_Pin_0初始化********/ GPIO_InitStructure.Pin=GPIO_PIN0;//Pin_0 GPIO_InitStructure.Mode=GPIO_MODE_IT_FALLING;//外部中斷下降沿觸發(fā) GPIO_InitStructure.Pull=GPIO_PULLUP; HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIOE初始化 //中斷線0-PA0HAL_NVIC_SetPriority(EXTI0_IRQn,2,1);//搶占優(yōu)先級為2,子優(yōu)先級為1HAL_NVIC_EnableIRQ(EXTI0_IRQn);//使能中斷線0Workpiece=0; //設(shè)置工件數(shù)初始值=0}/********************************************************************************函數(shù)名:EXTI0_IRQHandler*函數(shù)功能 :外部中斷0函數(shù)*輸入:無*******************************************************************************/voidEXTI0_IRQHandler(void){ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); //調(diào)用中斷處理公用函數(shù)}voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){if(GPIO_Pin==GPIO_PIN_0) { Workpiece+=1; delay_ms(10); if(Workpiece>99)Workpiece=0; }}seg.h#ifndef_SEG_H#define_SEG_H#include"sys.h" #defineSEG_Port GPIOC voidSeg_Init(void); voidSeg_Disp(u8data);#endifseg.c#include"seg.h"u8smg_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9共陽極數(shù)碼管段碼表voidSeg_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數(shù) __HAL_RCC_GPIOC_CLK_ENABLE();//開啟GPIOC時鐘 /**********GPIOC_Pin_0~Pin_15初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_All; GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//輸出速度 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;//推挽輸出Out_PP HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 //使GPIOC全部輸出1(熄滅) HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);}/****************數(shù)碼管顯示程序*********************功能:00~99數(shù)碼管顯示*輸入:帶顯示數(shù)字,u8類型,范圍0~99*輸出:無***************************************************/voidSeg_Disp(u8Data){ u8Tens,Ones, Seg_Tens,Seg_Ones; u16Disp_Data; Tens=Data/10; //求帶顯示數(shù)字的十位數(shù) Ones=Data%10; //求帶顯示數(shù)字的個位數(shù) Seg_Tens=smg_table[Tens]; //求十位數(shù)的段碼 Seg_Ones=smg_table[Ones]; //求個位數(shù)的段碼 Disp_Data=(Seg_Tens<<8)+Seg_Ones; //將十位數(shù)和個位數(shù)的段碼整合在一起 GPIOC->ODR=Disp_Data; //將整合后的段碼送16位顯示端口}利用EXTI2和EXTI3中斷實現(xiàn)按鍵加減1功能,電路怎么設(shè)計?程序怎么編?main.c#include"seg.h" //數(shù)碼管定義頭文件#include"exit.h" //傳感器定義頭文件u8Workpiece; //定義全局變量,用于存儲工件數(shù)intmain(){ HAL_Init(); //初始化HAL Sensor_Init(); //初始化傳感器 Seg_Init(); //初始化數(shù)碼管 Stm32_Clock_Init(RCC_PLL_MUL9); //時鐘切換到外部晶振,9倍頻 SysTick_Init(72); //初始化滴答時鐘,系統(tǒng)時鐘頻率72MHz while(1) { Seg_Disp(Workpiece); //將工件數(shù)送數(shù)碼管進行數(shù)值顯示 }}exti.h#ifndef_EXTI_H#define_EXTI_H #include"sys.h" #include"SysTick.h" voidEXTI_Init(void); //中斷線初始化 #endifexti.c#include"exti.h"externu8Workpiece; //定義外部變量,用于存儲工件數(shù)值(范圍0~99)/****按鍵初始化函數(shù)*********************************************************/voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE();//開啟GPIOE時鐘 /**********GPIOE_Pin_2初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_3;//Pin_23 GPIO_InitStructure.Mode=GPIO_MODE_IT_FALLING;//外部中斷下降沿觸發(fā) GPIO_InitStructure.Pull=GPIO_PULLUP; HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //GPIOE初始化 //中斷線2-PE2HAL_NVIC_SetPriority(EXTI2_IRQn,2,1);//搶占優(yōu)先級為2,子優(yōu)先級為1HAL_NVIC_EnableIRQ(EXTI2_IRQn);//使能中斷線2//中斷線3-PE3HAL_NVIC_SetPriority(EXTI3_IRQn,2,2);//搶占優(yōu)先級為2,子優(yōu)先級為1HAL_NVIC_EnableIRQ(EXTI3_IRQn);//使能中斷線2Workpiece=0; //設(shè)置工件數(shù)初始值=0}voidEXTI2_IRQHandler(void){ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); //調(diào)用中斷處理公用函數(shù)}voidEXTI3_IRQHandler(void){ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); //調(diào)用中斷處理公用函數(shù)}voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){if(GPIO_Pin==GPIO_PIN_2) { Workpiece+=1; delay_ms(10); if(Workpiece>99)Workpiece=0; }if(GPIO_Pin==GPIO_PIN_3) { Workpiece-=1; delay_ms(10); if(Workpiece<=0)Workpiece=0; }}Seg.h同題1Seg.c同題1利用EXTI5和EXTI6中斷實現(xiàn)按鍵加減1功能,電路怎么設(shè)計?程序怎么編?main.c同題2(2)exti.h#ifndef_EXTI_H#define_EXTI_H #include"sys.h" #include"SysTick.h" voidEXTI_Init(void); //中斷線初始化 #endif(3)exti.c#include"exti.h"externu8Workpiece; //定義外部變量,用于存儲工件數(shù)值(范圍0~99)/****按鍵初始化函數(shù)*********************************************************/voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE();//開啟GPIOE時鐘 /**********GPIOE_Pin_5初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_5|GPIO_PIN_6;//Pin_23 GPIO_InitStructure.Mode=GPIO_MODE_IT_FALLING;//外部中斷下降沿觸發(fā) GPIO_InitStructure.Pull=GPIO_PULLUP; HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //GPIOE初始化 //中斷線5\6-PE5HAL_NVIC_SetPriority(EXTI9_5_IRQn,2,1);//搶占優(yōu)先級為2,子優(yōu)先級為1Workpiece=0; //設(shè)置工件數(shù)初始值=0}voidEXTI9_5_IRQHandler(void){ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5); //調(diào)用中斷處理公用函數(shù) HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6); }voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){if(GPIO_Pin==GPIO_PIN_5) { Workpiece+=1; delay_ms(10); if(Workpiece>99)Workpiece=0; }if(GPIO_Pin==GPIO_PIN_6) { Workpiece-=1; delay_ms(10); if(Workpiece<=0)Workpiece=0; }Seg.h同題1Seg.c同題1利用EXTI5和EXTI6中斷實現(xiàn)按鍵加減1功能,數(shù)碼管采用動態(tài)顯示電路,電路怎么畫?程序怎么編?main.c同題4exti.h同題4exti.c同題4Seg.h#ifndef_SEG_H #define_SEG_H #include"sys.h" //位帶操作頭文件 #include"SysTick.h" //滴答時鐘頭文件 #defineSEG_Port GPIOC //給段碼線所在端口起名(只用低8位) #defineSEG_Pin GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3\ |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7 //給段碼引腳統(tǒng)一起名 #defineBS_Port GPIOD //給位選線所在端口起名(只用低2位) #defineBS_Pin GPIO_PIN_0|GPIO_PIN_1 //給位選引腳統(tǒng)一起名 #defineTens_S PDout(0) //給十位選通引腳起名 #defineOnes_S PDout(1) //給個位選通引腳起名 voidSeg_Init(void); //數(shù)碼管初始化函數(shù) voidSeg_Disp(u8data); //數(shù)碼管動態(tài)顯示函數(shù)#endifSeg.c#include"seg.h"u8smg_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9的共陽極數(shù)碼管段碼表//u8smg_table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9的共陰極數(shù)碼管段碼表voidSeg_Init() //數(shù)碼管初始化函數(shù){ GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO初始化變量 __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時鐘 __HAL_RCC_GPIOD_CLK_ENABLE(); //開啟GPIOD時鐘 GPIO_InitStructure.Pin=SEG_Pin; //段碼引腳 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH; //輸出速度為高 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出Out_PP HAL_GPIO_Init(SEG_Port,&GPIO_InitStructure); //按照以上設(shè)置初始化段碼線 HAL_GPIO_WritePin(SEG_Port,SEG_Pin,GPIO_PIN_SET); //段碼線全部輸出1 GPIO_InitStructure.Pin=BS_Pin; //位選引腳 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH; //輸出速度為高 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出Out_PP HAL_GPIO_Init(BS_Port,&GPIO_InitStructure); //按照以上設(shè)置初始化位選線 Tens_S=0;Ones_S=0; //十位和個位都不選通 }/****************數(shù)碼管顯示程序*********************功能:00~99數(shù)碼管顯示*輸入:待顯示數(shù)字,u8類型,范圍0~99*輸出:無***************************************************/voidSeg_Disp(u8Data){ u8Tens,Ones; //定義變量存儲十位和個位數(shù)值 u8Seg_Tens,Seg_Ones; //定義變量存儲十位和個位段碼 u16Disp_Data; //定義變量,存儲待顯示的16位段碼 Tens=Data/10; //求待顯示數(shù)字的十位數(shù)值 Ones=Data%10; //求待顯示數(shù)字的個位數(shù)值 Seg_Tens=smg_table[Tens]; //求十位數(shù)的段碼 Seg_Ones=smg_table[Ones]; //求個位數(shù)的段碼 //Disp_Data=0xff00+Seg_Tens; //將十位數(shù)的段碼整合為16位,影響低8位,高8位全為1 //Disp_Data=0x0000+Seg_Tens; //將十位數(shù)的段碼整合為16位,影響低8位,高8位全為0 Disp_Data=(SEG_Port->ODR&0xff00)+Seg_Tens;//將十位數(shù)的段碼整合為16位,影響低8位,高8位保持 SEG_Port->ODR=Disp_Data; //將整合后的段碼送顯示端口 Tens_S=1; //選通十位數(shù)碼管 delay_ms(50); //保持十位數(shù)碼管顯示 Tens_S=0; //斷開十位數(shù)碼管 //Disp_Data=0xff00+Seg_Ones; //將個位數(shù)的段碼整合為16位,影響低8位,高8位全為1 //Disp_Data=0x0000+Seg_Ones; //將個位數(shù)的段碼整合為16位,影響低8位,高8位全為0 Disp_Data=(SEG_Port->ODR&0xff00)+Seg_Ones;//將個位數(shù)的段碼整合為16位,影響低8位,高8位保持 SEG_Port->ODR=Disp_Data; //將個位數(shù)段碼送顯示端口 Ones_S=1; //選通個位數(shù)碼管 delay_ms(50); //保持個位數(shù)碼管顯示 Ones_S=0; //斷開個位數(shù)碼管}利用EXTI0中斷實現(xiàn)每按一下按鍵,PC7~PC0連接的8個LED狀態(tài)取反一次,電路怎么畫?程序怎么編?Main.c#include"exti.h" //按鍵中斷頭文件#include"led.h" //LED定義頭文件intmain(){ SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為72MHz exit_Init(); //初始化按鍵Led_Init();//初始化LED while(1);}exti.h#ifndef_EXTI_H#define_EXTI_H #include"sys.h" #include"SysTick.h" voidEXTI_Init(void); //中斷線初始化 #endifexti.cU16n;#include"exti.h"/****按鍵初始化函數(shù)*********************************************************/voidEXTI_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) __HAL_RCC_GPIOA_CLK_ENABLE();//開啟GPIOE時鐘 /**********GPIOE_Pin_0初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_0//Pin_0 GPIO_InitStructure.Mode=GP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度泰康人壽保險合同解除條件合同范本
- 2025年度國際市場金礦石進出口代理服務(wù)合同
- 2025年度旅游景區(qū)商鋪長期租賃及品牌授權(quán)合同
- 2025年度新能源汽車動力電池回收利用合同-@-15
- 2025年度工業(yè)自動化生產(chǎn)線安裝與調(diào)試合同范本
- 2025年度大型商業(yè)空間裝飾設(shè)計施工合同
- 2025年度建材城商業(yè)地產(chǎn)投資合作開發(fā)合同
- 2025年度化工企業(yè)安全培訓師勞動合同規(guī)范
- 2025年度國際貨運代理服務(wù)合同協(xié)議書
- 2025年度生態(tài)旅游區(qū)基礎(chǔ)設(shè)施合同
- 第七講推動構(gòu)建新時代的大國關(guān)系格局-2024年形勢與政策(課件)
- 2025年高考作文備考:議論文寫作的論證手法
- 2024年廣州市黃埔區(qū)數(shù)學六上期末綜合測試模擬試題含解析
- 數(shù)獨6宮格300試題
- 24年注安-管理的題
- 三化一穩(wěn)定嚴進嚴出專案報告
- 2024至2030年中國心理咨詢行業(yè)市場預測與投資規(guī)劃分析報告
- 國際貿(mào)易地理 全套課件
- 廣西2024年高考物理模擬試卷及答案1
- 2024年廣東省中考歷史真題(含解析)
- GB/T 20878-2024不銹鋼牌號及化學成分
評論
0/150
提交評論