freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于stm32的led點陣光筆設計與實現(xiàn)畢業(yè)論文軟件部分(編輯修改稿)

2025-04-03 10:24 本頁面
 

【文章內容簡介】 時鐘 (RTC)和備份寄存器提供電源。如圖表 4 所示 12 圖表 4 電源框圖 低功耗 在系統(tǒng)或電源復位以后,微控制器處于運行狀態(tài)。運行狀態(tài)下的 HCLK 為 CPU 提供時鐘,內核執(zhí)行程序代碼。 當 CPU不需繼續(xù)運行時,可以利用多個低功耗模式來節(jié)省功耗,例如等待某個外部事件時。用戶需要根據(jù)最低電源消耗,最快速啟動時間和可用的喚醒源等條件,選定一個最佳的低功耗模式。 STM32F10xxx 有三中低功耗模式: 睡眠模式 (Cortex?M3 內核停止,外設仍在運行 ) 停止模式 (所有的時鐘都以停止 ) 待機模式 ( 電源關閉 ) 此外,在運行模式下,可以通過以下方式中的一種降低功耗: 降低系統(tǒng)時鐘 關閉 APB 和 AHB總線上未被使用的外設的時鐘 通用和復用 I/O 每個 GPI/O 端口有兩個 32 位配置 寄存器 (GPIOx_CRL, GPIOx_CRH),兩個 32位數(shù)據(jù)寄存器 (GPIOx_IDR, GPIOx_ODR),一個 32 位置位 /復位寄存器 (GPIOx_BSRR),一個 13 16 位復位寄存器 (GPIOx_BRR)和一個 32 位鎖定寄存器 (GPIOx_LCKR)。每個 I/O 端口的特定硬件特征, GPIO 端口的每個位可以由軟件分別配置成多種模式。 輸入浮空 輸入上拉 輸入下拉 模擬輸入 開漏輸出 推挽式輸出 推挽式復用功能 開漏復用功能 每個 I/O 端口位可以自由編程,然而 I/0端口寄存器必須按 32位字被訪問 (不允許半 字或字節(jié)訪問 )。 GPIOx_BSRR 和 GPIOx_BRR 寄存器允許對任何 GPIO 寄存器的讀 /更改的獨立訪問;這樣,在讀和更改訪問之間產生 IRQ 時不會發(fā)生危險。圖表 5 給出了 I/O 端口位的基本結構 圖表 5 I/0端口位的基本結構 外部中斷 /事件控制器( EXTI) 外部中斷 /事件控制器由 19個產生事件 /中斷要求的邊沿檢測器組成。每個輸入線可以獨立地配置輸入類型 (脈沖或掛起 )和對應的觸發(fā)事件 (上升沿或下降沿或者雙邊沿都觸發(fā) )。每個輸入線都可以被獨立的屏蔽。掛起寄存器保持著狀態(tài)線的中斷要求。 EXTI 控制器的主要特性如下: 每個中斷 /事件都有獨立的觸發(fā)和屏蔽 每個中斷線都有專用的狀態(tài)位 支持多達 19 個中斷 /事件請求 檢測脈沖寬度低于 APB2 時種寬度的外部信號 14 外部中斷 /事件控制器框圖如圖表 6 所示: 圖表 6外部中斷 /事件控制器框圖 如果要產生中斷,必須事先配置好并使能中斷線。根據(jù)需要的邊沿檢測設置 2個觸發(fā)寄存器,同時在中斷屏蔽寄存器的相應位寫 1允許中斷請求。當外部中斷線上發(fā)生了需要的邊沿時,將產生一個中斷請求,對應的掛起位也隨之被置 1。在掛起寄存器的對應位寫 1,可以清除該中斷請求。如果要為產生事件, 必須事先配置好并使能事件線。根據(jù)需要的邊沿檢測通過設置 2 個觸發(fā)寄存器,同時在事件屏蔽寄存器的相應位寫 1 允許事件請求。當事件線上發(fā)生了需要的邊沿時,將產生一個事件請求脈沖,對應的掛起位不被置 1。通過在軟件中斷 /事件寄存器寫 1,也可以通過軟件產生中斷 /事件請求。 通過下面的過程來配置 19 個線路做為中斷源: 配置 19 個中斷線的屏蔽位 (EXTI_IMR)。 配置所選中斷線的觸發(fā)選擇位 (EXTI_RTSR 和 EXTI_FTSR)。 配置那些控制映像到外部中斷控制器 (EXTI)的 NVIC 中斷通道的使能和屏蔽位,使得 19 個 中斷線中的請求可以被正確地響應。 配置 19 個事件線的屏蔽位 (EXTI_EMR)。 配置事件線的觸發(fā)選擇位 (EXTI_RTSR 和 EXTI_FTSR)。 配置 19 個中斷 /事件線屏蔽位 (EXTI_IMR, EXTI_EMR)。 設置軟件中斷寄存器的請求位 (EXTI_SWIER)。 通用 I/O 端口與 16 個外部中斷 /事件的連接方式如圖表 7 所示: 15 圖表 7 外部中斷通用 I/O映射 通用定時器 通用定時器是一個通過可編程預分頻器驅動的 16 位自動裝載計數(shù)器構成。它適用于多種場合,包括測量輸入 信號的脈沖長度 (輸入捕獲 )或者產生輸出波形 (輸出比較和 PWM)。使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調整。 定時器是完全獨立的,而且沒有互相共享任何資源,它們可以一起同步操作。 通用 TIMx (TIM TIM TIM4 和 TIM5)定時器功能包括: 16位向上、向下、向上 /向下自動裝載計數(shù)器 16 位可編程 (可以實時修改 )預分頻器,計數(shù)器時鐘頻率的分頻系數(shù)為 1~ 65535之間的任意數(shù)值。 4 個獨立通道:輸入捕獲、輸出比較、 PWM生成 (邊緣或中間對齊模式 )、單脈沖模 16 式輸出。 使用外部信號控制定時器和定時器互連的同步電路 如下事件發(fā)生時產生中斷 /DMA: ─更新:計數(shù)器向上溢出 /向下溢出,計數(shù)器初始化 (通過軟件或者內部 /外部觸發(fā) ) ─觸發(fā)事件 (計數(shù)器啟動、停止、初始化或者由內部 /外部觸發(fā)計數(shù) )。 ─輸入捕獲 ─輸出比較 ─支持針對定位的增量 (正交 )編碼器和霍爾傳感器電路 ─觸發(fā)輸入作為外部時鐘或者按周期的電流管理 可編程通用定時器的主要部分是一個 16 位計數(shù)器和與其相關的自動裝載寄存器。這個計數(shù)器可以向上計數(shù)、向下計數(shù)或者向上向下雙向計數(shù)。此計數(shù)器時鐘由預分頻器 分頻得到。計數(shù)器、自動裝載寄存器和預分頻器寄存器可以由軟件讀寫,在計數(shù)器運行時仍可以讀寫。時基單元包含:計數(shù)器寄存器 (TIMx_CNT)、預分頻器寄存器 (TIMx_PSC)、自動裝載寄存器 (TIMx_ARR)。圖表 8 為內部時鐘分頻因子為 2 時的計數(shù)器時序圖。 圖表 8 計數(shù)器時序圖 整體的系統(tǒng)流程圖 本實驗主要是通過四個按鍵來控制光筆在 32X32 點陣上的動作,包括點亮、筆畫擦除,連字多寫及休眠定時的設置。具體的系統(tǒng)流程圖如圖表 9: 17 開 始 硬 件 初 始 化等 待 按 鍵 進 入 是 否 觸 屏掃 描 L E D 屏是 否 有 光 信 號 返 回待機頁面選擇坐 標 點 亮整屏擦除筆畫擦除反顯測頻數(shù)據(jù)存儲初始化計數(shù)定時控制NYNNYY 圖表 9 系統(tǒng)數(shù)據(jù)流圖 32X32 點陣行列掃描的實現(xiàn) 主控制程序包括系統(tǒng)初始化( GPIO 的設置,時鐘的設置,定時中斷的設置等等),點陣掃描控制,按鍵功能的程序(點亮,反顯,擦除,連字多寫,休眠定時), 點陣掃描控制程序 分為行掃描與列掃描 , 行掃描由 STM32 的 GPI0C 口通過對四片 74LS273 的控制來實現(xiàn)循環(huán)點亮點陣的 32 行,同時通過對兩片 74HC154 的控制來實現(xiàn) 32 列的循環(huán)點亮,為了盡可能的節(jié)省 GPIO 口,用到了片選,即 當需要點亮 某一芯片時 時, 控制對應的 GPIO 口輸出 0其它芯片輸出 1,只有該 芯 片有效,反之,控制片選無效, 從而達到節(jié)省 GPIO 的目的,利用微亮掃描過程實現(xiàn) 循環(huán)點亮 1024 個 點。 具體代碼如下, /***********************************************/ //函數(shù)名 void Lsm() // 功能 列掃描函數(shù),實現(xiàn)點陣 32 的逐一點亮滅, // 保證每一次只點亮一只 LED /***********************************************/ void Lsm(void) { unsigned char j。 Dl_Bit = 0x01。 Sm_Row = 0。 //列掃描次數(shù)初值 18 Gpioc_Ph = Gpioc_Phamp。0xf0。 //GPIOC 緩存低四位清零 Gpioc_Ph = Gpioc_Phamp。 Dl_Bit。 //緩存列掃描信息 GPIO_Write(GPIOC,Gpioc_Ph)。 //微亮輸出列 for(j = 0。j 8。j++) //掃描前 8列 { if(Bhzl) { Dl_Bit_Temp = S_Yle[Sm_Line+16][Clzl]amp。Dl_Bit。 } else { Dl_Bit_Temp = S_Yle[Sm_Line][Clzl]amp。Dl_Bit。 } if(0 ==Dl_Bit_Temp) { Gpioc_Ph = Gpioc_Ph|0xf00。 //不亮 } else { if(0 == Clzl) { //第一個 8位點亮 Gpioc_Ph = Gpioc_Ph|0xe00。 Gpioc_Ph = Gpioc_Phamp。0xeff。 } else if(1 == Clzl) { //第二個 8位點亮 Gpioc_Ph = Gpioc_Ph|0xd00。 Gpioc_Ph = Gpioc_Phamp。0xdff。 } else if(2 == Clzl) { //第三個 8位點亮 Gpioc_Ph = Gpioc_Ph|0xb00。 Gpioc_Ph = Gpioc_Phamp。0xbff。 } else if(3 == Clzl) { //第四個 8位點亮 Gpioc_Ph = Gpioc_Ph|0x700。 Gpioc_Ph = Gpioc_Phamp。0x7ff。 } } Gpioc_Ph = Gpioc_Phamp。0xf00。 //GPIOC 緩存低八位清零 Gpioc_Ph = Gpioc_Phamp。Dl_Bit。 //緩存列掃描信息 GPIO_Write(GPIOC,Gpioc_Ph)。 //微亮輸出列 Delay_Ms(1)。 Sm_Row++。 19 Dl_Bit = 1 。 //左移一位 if(0x100 == Dl_Bit)Dl_Bit = 0x01。 } }/***************************************************/ //函數(shù)名 void Lsm( voi) // 功能 點陣掃描函數(shù),實現(xiàn)點陣 1024 個點的逐一點亮 // 從第一行開始按列掃描方式,從左往右逐一點亮 32 列上的 //32 個點 ,再換第二行再依次點亮,直到 1024 個點都亮滅一次 /******************************************************/ void Dzsm(void) { unsigned char k。 Gpioc_Ph = Gpioc_Ph|0xe00。//微亮片選第一個 8位 Gpioc_Ph = Gpioc_Phamp。0xeff。//微亮片選第一個 8位 GPIO_Write(GPIOC,Gpioc_Ph)。 Bhzl = 0。 //行小于 16 Sm_Line = 0。 //行掃描次數(shù) for(k = 0。k 16。k++) //行循環(huán) 16 次 0~15 { Blzl = 0。 //列小于 8 Clzl = 0。 Gpiod_Ph = Gpiod_Ph|0xd0。//微亮片選低位 Gpiod_Ph = Gpiod_Phamp。0xd0。 Gpiod_Ph = Gpiod_Ph|Sm_Line。 GPIO_Write(GPIOD,Gpiod_Ph)。//微亮輸出列 Lsm()。 //列掃描 Blzl = 1。 //列大于 8 小于 16 Clzl = 1。 Gpiod_Ph = Gpiod_Ph|0xd0。//微亮片選低位 Gpiod_Ph = Gpiod_Phamp
點擊復制文檔內容
黨政相關相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1