『壹』 pic單片機編程用按鍵控制數碼管時,按下按鍵後數碼管會先滅後亮是什麼原因
pic沒玩過,但按鍵處理應該和51一樣的.你按下按鍵,防抖用延時10ms吧,這時按下按鍵,如果沒鬆手,程序一直執行延時程序,當然數碼不顯示了。
一般方法是防抖調用延時子程序改為調用顯示子程序。這樣,你按下按鍵,數碼管就會顯示。
『貳』 我用PIC18F系列單片機寫程序後,最簡單的C程序,用ISIS 7 Professional模擬失敗,有哪位老師指導.
我都說過了,pic單片機需要設置其看門狗那些,你這個程序里沒有,不知道你有沒有在proteus里設置的,如果沒有設置單片機老是復位,程序都跑不了
『叄』 幫忙看一下這個PIC單片機的按鍵電路吧
有些編譯器會在main主函數建立循環,所以會出現這種情況,你可以在portd=0xff;後面加上while(1);程序就不會返回main繼續循環了。為了證實編譯器建立main函數的循環,你還可以這樣試試:
void
main()
{
trisd=0;
portd=0;
delay_500ms();//延時500毫秒
portd
=
0xff;
delay_500ms();//延時500毫秒
}
按你的想法,上面這段程序執行到第2個delay_500ms();後就不應該再執行了,但實際情況程序可能會返回main繼續循環,結果是8個燈亮500毫秒,滅500毫秒,周而復始。
『肆』 求用pic單片機 和74hc595 控制的四位七段數碼管顯示程序 由三個按鍵控制 顯示數字和字母就可以 求大神
建議你看一下北航的《PIC16系列單片機C程序設計與PROTEUS模擬》一書,其中有74HC164控制的數碼管的模擬與實際線路和完整的C程序。164和595是類似的晶元。
『伍』 pic單片機,鍵盤控制,休眠喚醒後,五分鍾內無任何操作,則又進入休眠狀態,程序怎麼寫啊
你可以啟動一個定時器,如每隔一定時間中斷,如100ms中斷一次,用一個寄存器如TIME來累計中斷的次數,顯然5分鍾需中斷3000次。
每次按鍵中斷,程序讓TIME清0。因此,只有在5分鍾內都沒按鍵,TIME才有可能達到3000。只有當TIME值大於3000時才讓單片機進入休眠狀態,即在定時器中斷時,如果TIME的值超過3000就進入休眠。
『陸』 求助:PIC單片機通過按鍵修改定時器1的初值
我沒做過PIC單片機,但是你的原理就是通過中斷服務程序還改變定時器的值。我想你首先應該去研究下機器周期也就是時間方面,另一個就是你所測方波的形成原理。
『柒』 PIC單片機常用模塊與綜合系統設計實例精講的目 錄
第1章 PIC單片機概述 2
1.1 PIC單片機的特點 2
1.2 PIC單片機的系列產品 5
1.2.1 基本級PIC系列單片機 6
1.2.2 中級PIC系列單片機 6
1.2.3 高級PIC系列單片機 8
1.3 PIC16F87X單片機的硬體
1.3 結構 10
1.3.1 PIC16F87X的主要特色 10
1.3.2 PIC16F87X的內部結構 11
1.3.3 PIC16F87X的引腳功能 16
1.4 本章小結 21
第2章 PIC單片機的CPU和中斷系統 22
2.1 PIC單片機的CPU 22
2.1.1 系統配置 22
2.1.2 振盪器配置 24
2.1.3 復位 26
2.1.4 中斷 33
2.1.5 監視定時器WDT 33
2.1.6 睡眠模式 35
2.1.7 在線調試 37
2.1.8 程序代碼保護 37
2.1.9 用戶標識碼 37
2.1.10 在線串列編程技術ICSP(In-Circuit Serial Programming) 37
2.2 中斷系統 38
2.2.1 中斷的基本概念 38
2.2.2 PIC16F87X的中斷源及中斷邏輯 39
2.2.3 與中斷相關的寄存器 44
2.2.4 CPU對中斷的處理 48
2.3 本章小結 51
第3章 PIC單片機的指令系統 52
3.1 PIC匯編語言指令格式 53
3.2 PIC16F87X指令集 54
3.3 偽操作指令 60
3.4 定址方式 64
3.5 本章小結 67
第4章 PIC單片機的開發工具 68
4.1 PIC系列單片機的模擬器 68
4.2 PIC系列單片機的編程器及開發套件 73
4.3 MPLAB-IDE 7.4版集成開發環境 77
4.3.1 MPLAB-IDE 7.4概述 77
4.3.2 MPLAB-IDE 7.4工程創建實例 80
4.3.3 幾個常用的菜單項 83
4.4 本章小結 85 第5章 I/O輸入輸出模塊 88
5.1 44掃描鍵盤設計實例 88
5.1.1 實例說明 88
5.1.2 鍵盤知識介紹 88
5.1.3 硬體電路設計 90
5.1.4 軟體設計 90
5.1.5 實例總結 93
5.2 直接驅動LED顯示 94
5.2.1 實例說明 94
5.2.2 LED數碼管知識 94
5.2.3 硬體電路設計 94
5.2.4 軟體設計 95
5.2.5 實例總結 96
第6章 LCD液晶顯示模塊:溫度測量系統設計實例 97
6.1 實例說明 97
6.2 DS18B20與YMSC-G12864
6.2 IDYEWWD 98
6.2.1 溫度感測器DS18B20 98
6.2.2 液晶顯示屏YMSC-G12864I-DYEWWD 100
6.3 硬體電路設計 103
6.4 軟體設計 105
6.4.1 溫度感測器DS18B20的軟體設計 105
6.4.2 液晶顯示屏YMSC-G12864-IDYEWWD的軟體設計 109
6.5 實例總結 116
第7章 定時器模塊:用定時器控制埠輸出實例 117
7.1 實例說明 117
7.2 定時器Timer0介紹 117
7.3 硬體電路設計 118
7.4 軟體設計 119
7.5 實例總結 120
第8章 A/D模塊:壓力測量系統設計實例 121
8.1 實例說明 121
8.2 A/D轉換相關知識 121
8.2.1 A/D轉換的原理說明 121
8.2.2 單片機相關寄存器介紹 122
8.2.3 A/D轉換操作對時間的要求 124
8.3 硬體電路設計 125
8.4 軟體設計 125
8.4.1 程序設計流程 126
8.4.2 程序代碼說明 126
8.5 實例總結 128
第9章 存儲器模塊:基於I2C對EEPROM 24C02的讀寫 129
9.1 實例說明 129
9.2 24C02與I2C介面介紹 129
9.2.1 24C02簡介 129
9.2.2 PIC16F877 I2C介面簡介 130
9.2.3 I2C匯流排規則 130
9.3 硬體電路設計 131
9.4 軟體設計 132
9.5 實例總結 136
第10章 比較與檢測模塊 137
10.1 利用CCP模塊控制繼電器 137
10.1.1 實例說明 137
10.1.2 定時器TMR1介紹 137
10.1.3 硬體電路設計 139
10.1.4 軟體設計 140
10.1.5 實例總結 141
10.2 脈沖頻率的檢測設計 141
10.2.1 實例說明 141
10.2.2 定時器TMR2介紹 141
10.2.3 硬體電路設計 142
10.2.4 軟體設計 143
10.2.5 實例總結 144
10.3 電壓測量模塊 144
10.3.1 實例介紹 144
10.3.2 硬體電路設計 145
10.3.3 軟體設計 145
10.3.4 實例總結 147
第11章 步進電機模塊 148
11.1 實例說明 148
11.2 步進電機驅動工作原理 148
11.3 硬體電路設計 149
11.4 軟體設計 150
11.4.1 軟體設計流程 151
11.4.2 程序代碼說明 152
11.5 實例總結 153
第12章 信號發生模塊 154
12.1 PWM實現DA轉換 154
12.1.1 實例說明 154
12.1.2 PWM模塊架構 155
12.1.3 硬體電路設計 156
12.1.4 軟體設計程序 157
12.1.5 實例總結 158
12.2 正弦波發生器 158
12.2.1 實例說明 158
12.2.2 TLC5620介紹 158
12.2.3 硬體電路設計 160
12.2.4 軟體程序設計 160
12.2.5 實例總結 162
第13章 數字PID控制模塊 163
13.1 PID控制概述 163
13.2 位置式PID控制演算法 164
13.3 增量式PID控制演算法 165
13.3.1 增量式控制演算法流程 166
13.3.2 數字PID控制演算法的改進 167
13.4 數字PID控制演算法代碼 168
13.5 實例總結 170
第14章 直流數控穩壓電源模塊 171
14.1 實例說明 171
14.2 設計思路分析 171
14.2.1 D/A轉換器DAC0832 172
14.2.2 步進0.1V實現 172
14.3 硬體電路設計 172
14.3.1 模數轉換電路 172
14.3.2 電流放大電路 173
14.3.3 人機介面電路 173
14.3.4 穩壓電源電路 174
14.4 軟體設計 174
14.4.1 程序設計流程 174
14.4.2 程序代碼說明 174
14.5 實例總結 177
第15章 網路通信與數據傳輸模塊 178
15.1 USART串列通信模塊實例 178
15.1.1 實例說明 178
15.1.2 列印機並口介紹 178
15.1.3 硬體電路設計 180
15.1.4 軟體設計 181
15.1.5 實例總結 182
15.2 I2C匯流排通信模塊實例 182
15.2.1 實例說明 182
15.2.2 I2C匯流排介紹 183
15.2.3 硬體電路設計 187
15.2.4 軟體設計 188
15.2.5 實例總結 195
15.3 SPI匯流排通信模塊實例 195
15.3.1 實例說明 195
15.3.2 SPI模塊相關的寄存器 195
15.3.3 硬體電路設計 197
15.3.4 軟體設計 198
15.3.5 實例總結 200
15.4 通信模塊:CAN匯流排模塊實例 200
15.4.1 實例說明 201
15.4.2 設計思路分析 202
15.4.3 硬體電路設計 206
15.4.4 軟體程序設計 207
15.4.5 實例總結 212
15.5 通信模塊:USB數據傳輸模塊實例 212
15.5.1 實例說明 212
15.5.2 設計思路分析 213
15.5.3 硬體電路設計 219
15.5.4 USB固件程序設計 220
15.5.5 實例總結 225 第16章 智能手電筒開發實例 228
16.1 系統功能說明 228
16.2 系統工作原理與實現方法 229
16.2.1 系統的供電 229
16.2.2 燈珠和LED點亮或熄滅的實現 229
16.2.3 按鍵掃描電路和A/D轉換電路圖原理 230
16.2.4 數據的顯示 231
16.2.5 蜂鳴器驅動和背光源驅動 235
16.2.6 電池的自動充電實現 236
16.3 軟體設計與代碼分析 237
16.3.1 軟體設計 237
16.3.2 主程序 239
16.3.3 中斷子程序 244
16.3.4 時鍾處理子程序 245
16.3.5 2ms到處理子程序 247
16.3.6 A/D中斷子程序 252
16.4 實例總結 255
第17章 汽車應急啟動器系統開發實例 257
17.1 系統功能說明 257
17.2 系統硬體框圖 258
17.3 系統各模塊工作原理與實現方法 259
17.3.1 系統電源部分 259
17.3.2 蜂鳴器驅動與系統檢測按鍵掃描電路 259
17.3.3 燈管驅動與燈管按鍵掃描電路 260
17.3.4 發光二極體驅動與內部電池電壓按鍵掃描電路 261
17.3.5 液晶顯示器(LCD)驅動電路 261
17.3.6 內部電池與外部電池連接正確與否檢測電路 264
17.3.7 應急啟動控制電路 264
17.3.8 輪胎壓力檢測電路 265
17.3.9 輪胎氣泵啟動控制與輪胎
17.3.9 充氣按鍵掃描電路 267
17.3.10 加鍵與減鍵掃描電路 268
17.3.11 外部電池檢測按鍵掃描電路 269
17.3.12 電池電壓檢測與電池充電電路 269
17.4 軟體設計與代碼分析 270
17.4.1 主程序 271
17.4.2 氣泵處理程序 280
17.4.3 燈管處理程序 280
17.4.4 外部電池檢測程序 282
17.4.5 系統檢測程序 283
17.4.6 時鍾中斷程序 284
17.4.7 內部電池充電程序 288
17.5 實例總結 289
第18章 無功功率補償控制器設計實例 290
18.1 系統功能說明 290
18.2 系統硬體框圖 292
18.3 系統各模塊工作原理與實現方法 292
18.3.1 系統的供電 292
18.3.2 按鍵掃描電路 293
18.3.3 電流和電壓相位差檢測電路 294
18.3.4 電流和電壓的A/D轉換電路 297
18.3.5 八段數碼管和LED指示燈電路 298
18.3.6 十路電力電容驅動電路 298
18.3.7 EEPROM的驅動電路 300
18.4 軟體設計與代碼分析 301
18.4.1 初始化、欠流判斷和開機按鍵掃描程序 301
18.4.2 檢測電力電容容量程序 308
18.4.3 檢測功率因數程序
18.4.3 (主程序) 310
18.4.4 參數設置程序 323
18.5 實例總結 325
『捌』 求電子血壓計設計 單片機pic16f877的C程序
3 電子血壓計工作原理
3.1 血壓測量原理定義
血壓的概念就是血液流經血管壁時的壓力。由心臟出來的血液,需要有推力,才能繞行身體一周,心臟就是借著不停的收縮、放鬆,將血液推送前進。血壓有兩種,一是收縮壓:是當心臟收縮把血液打到血管所測得的血壓,二是舒張壓:是心臟在不收縮所得的壓力。當袖帶的壓力等於血壓時,血液開始可以流通而產生所謂的袖帶聲,這時候也就是收縮壓,必須開始從這里做記錄,直到最後當袖帶聲沒有的時候,此點即為舒張壓。
3.2 系統工作原理
系統框圖如圖2所示。系統由壓力感測器(FGN-605PGSR),恆流源(LM324×1),差分放大(LM324×3),0.8 Hz二階高通濾波(LM324×1),200倍放大(LM324×2),38Hz二階低通濾波(LM324×1),血壓脈沖觸發(LM311×1),液晶驅動器(HD44780A)和單片機(PIC16F877)組成。
單片機主要工作為:PWM輸出控制氣泵充氣漏氣調整袖帶內氣壓;一路ADC采樣袖帶內氣壓直流分量以便取得收縮壓和舒張壓;一路ADC采樣袖帶內氣壓交流分量經分析計算分析後確定收縮壓和舒張壓的瞬態時間位置;接收血壓脈沖信號觸發ADC工作;將計算出的收縮壓和舒張壓結果輸出至液晶驅動器顯示。
一次測量血壓的過程為:按激活鍵單片機PWM輸出控制氣泵充氣至200 mmHg高,慢慢以每秒約下降5 mmHg的速度放氣。壓力感測器輸出信號經差分放大器後變單端信號一路送入單片機ADC監視直流分量,另一路送入0.8 Hz二階高通濾波器濾除直流分量;交流分量經200倍放大後輸入38 Hz二階低通濾波器去除電源及皮膚與袖帶摩擦的高頻雜訊和工頻干擾並將此信號維持在0~5 V之問,濾波後的交流分量一路送入血壓脈沖觸發然後觸發單片機ADC工作,另一路送入單片機ADC計算幅值,先找出最大振幅值Amax,在往前找幅值為0.5Amax的瞬態位置對應血壓直流分量即為收縮壓,往後找幅值為0.8Amax的瞬態位置對應血壓直流分量即為舒張壓,將計算出的收縮壓和舒張壓結果輸出至液晶驅動器顯示。血壓信號及收縮壓和舒張壓位置
4 硬體設計
4.1 PIC16F877單片機
時鍾輸入 外接有源晶振通過OSC1/CLKIN(Pin13)輸入8 MHz主頻。
電源輸入 系統電源為9 V電池,通過外部7805降壓到直流5 V輸入VDD(Pin11,32)。
按鍵輸入 按鍵低電平脈沖通過RB0/INT(Pin33)輸入,以中斷方式觸發一次測量血壓的過程,中斷服務子程序有消除按鍵抖動的處理。
氣泵驅動 RC1(Pin33)為內部PWM模塊的輸出信道,PWM驅動氣泵充氣和放氣。
喇叭驅動 RC3(Pin37)驅動喇叭輸出測量血壓時的提示和過程聲音。
液晶驅動控制 對HD44780A輸出指令和數據進行顯示控制,RC.3~5(Pin18,23,24)接HD44780A控制線RS,R/W,EN;RD.0~7(Pin19~22,27~30)接HD44780A數據匯流排DB0~7。
4.2 提供感測器偏置的恆流源
如圖4所示,運放LM324-11輸入正端為可設定的直流偏置電壓Vref,LM324-11輸出端和輸入負端提供了壓力感測器電橋恆流偏置的迴路。
4.3 差分轉單端輸出的放大電路
經過兩個運放LM324-12,13隔離,LM324-14差分放大後其輸出電壓
4.4 0.8 Hz二階高通巴特沃思濾波器
採用二階巴特沃思二階高通濾波,運放LM324-24接成跟隨器放大倍數為1,高通濾波器的傳遞函數為:
取二階巴特沃思網路函數的系數a11=1.414,截止角頻率ωc=0.8×2π,取C1=C2=0.1μF。
4.5 200倍放大電路
用兩個級運放LM324-21,22搭成的比例放大電路,第一級為20倍放大,第二級為10倍放大。
4.6 38Hz二階低通巴特沃思濾波器
採用二階巴特沃思二階低通濾波,運放LM324-23接成跟隨器,放大倍數為1,低通濾波器的傳遞函數為:
取二階巴特沃茲網路函數的系數a11=1.414,截止角頻率ωc=38×2 ,取C3=C4=0.1μF。
4.7 血壓脈沖觸發
利用比較器LM311設定一定的電壓門限,將血壓交流信號形成脈沖,輸入PIC16F877 RC2的CCP1觸發ADC信道1工作。
5 單片機軟體設計
5.1 初始化工作
上電後對單片機寄存器,SRAM,特殊功能的設置如PWM,輸入輸出埠的設置做必要的初始化;對HD44780A輸出指令關閉顯示。
5.2 按鍵輸入
未按鍵時RB0/INT(Pin33)埠為大電阻上拉狀態,有按鍵時低電平脈沖通過此埠輸入,中斷方式觸發一次測量血壓的過程,進入中斷服務子程序後每隔10 ms判斷一次埠狀態,連續讀到3次低電平,則判斷按鍵有效,這是消除按鍵抖動的處理。判斷按鍵有效後對HD44780A輸出指令顯示開始測試畫面。
5.3 氣泵充氣
判斷按鍵有效後,PWM輸出對氣泵充氣。停止充氣的條件有兩個必須同時滿足:一是ADC信道0測到的血壓直流分量是否大於4 V;二是ADC信道1測到血壓交流分量是否介於1.6~4.9 V之間。滿足此條件表示氣壓已足夠,可停止充氣,一般此時氣壓略大於200 mmHg。
5.4 測量血壓
PWM輸出勻速放氣。心跳脈沖通過CCP1觸發ADC信道1采樣血壓交流分量測出每個脈沖的峰峰值,同時計算出這個脈沖時間段內ADC信道0測到的血壓直流分量的平均值。把峰峰值和直流平均值作為一對數據記錄起來,每個心跳脈沖會對應一對數據。 5.5 計算收縮壓和舒張壓
ADC信道0測到的血壓直流分量是否小於1 V表示氣壓低於50 mmHg,是單次測量結束的標志。然後開始統計記錄下來的若干組峰峰值和直流平均值,找出峰峰值最大的值Amax,在往前找峰峰值最接近0.5Amax的一對數據其中血壓直流分量即為收縮壓,往後找峰峰值最接近0.8Amax的一對數據其中血壓直流分量即為舒張壓。判斷測出收縮壓和舒張壓的值落在合理的數據范圍內,如:收縮壓應在80~190 mmHg范圍內和舒張壓50~120 mmHg范圍內。將計算出落在合理數據范圍內的收縮壓和舒張壓結果輸出至液晶驅動器顯示。
5.6 ADC數據處理
ADC信道1測血壓交流分量的采樣率為2 kHz,其取值原由為:心跳脈沖頻率上限約為2 Hz,定義峰值出現的時間約占心跳脈沖周期的1%,在峰值附近ADC測量10次,所以ADC的采樣率=2 Hz/1%×10=2 kHz。因為ADC測量到數據含有電源及皮膚與袖帶摩擦的高頻雜訊,必須經過ADC多次測量才可將雜訊造成的異常數據去除,這里採用的做法將多次測量的數據先做比較先去掉個別與大多數數據相差較大的數據,在剩下的數據中取偏大(小)的幾個數據做平均從而得到高(低)峰值。
本設計將PIC16F877設置單次數模轉換時間為48μs,具體條件為FUSC=8 MHz,TOSC=125 ns,TAD=32TOSC,故單次數模准轉換時間TADC=12TAD=12×32×125 ns=48μs。實際上在數模轉換前還必須保留20 μs采樣保持時間。這種設置采樣率的最大值可做到1/(48μs+20 μs)=14.7 kHz遠大於要求的2 kHz,故滿足要求。ADC信道0測血壓直流分量模准轉換時間設置與ADC信道1相同,每次采樣緊接著ADC信道1采樣後進行。
5.7 異常處理
(1) 充氣時在限定時間內未滿足氣壓足夠高即停止充氣的條件,則先放氣然後重新充氣。連續3次出現此異常,則HD44780A輸出錯誤信息。
(2) 放氣時在限定時間內未滿足氣壓足夠低即停止血壓測量的條件,則放棄此次測量數據再放氣然後重新充氣並測量。連續3次出現此異常,則HD44780A輸出錯誤信息。
(3) 測量後計算出的收縮壓和舒張壓未落在合理的數據范圍內,則放棄此次測量數據再放氣然後重新充氣並測量。連續3次出現此異常,則HD44780A輸出錯誤信息。
6 結 語
電子血壓計具有低成本、小型化、低功耗、自動化程度高的優點,在使用上帶來了便攜和易操作的特點,從而使電子血壓計呈現出家用化的趨勢。本文給出了完整的攜帶式電子血壓計設計方案,並基於PIC 16F877為控制核心輔以壓力感測器和外圍的模擬電路以及LCD驅動晶元實現了電子血壓計的設計。此設計可直接轉化為實際產品,故有較高的實用價值。
『玖』 我用PIC單片機的RB口做按鍵輸入,8個I/O做16個按鍵,同時想把這8個I/O用作LED指示燈,要做才能實現謝謝!
這個就只需要8個口就可以實現了,也不需要其他的晶元,運用矩陣電路來連接,再加上程序處理就可以了。關鍵是程序方面能調試一點,注意避免微導通就行了。自己好好想想,這東西是有點難的。有次參加企業的筆試還碰到這道題,搞得沒時間做出來。
『拾』 Pic單片機RA0,RA1通過按鍵接地,判斷RA0,RA1的狀態來執行相應的操作.為什麼總執行第一個if語句的內容
光設置TRISA是不夠的。
你看一下datasheet,引腳編號上面有順序的,例如AN0/CLK1/RA0。這個順序表明了引腳IO的優先順序,也就是AN0是最優先的,其次是CLK1這個口,最後才是RA0。如果你打開了AN0或者CLK1口,那RA0永遠讀0。
解決方法:一般最容易出現的是ANSEL(模擬信號使能)開啟,導致IO口變為模擬口。
設置ANSEL寄存器為1,讓RA0 RA1都是數字口即可(默認是模擬口)。
如果上面的方法不行,你也要逐一查看優先順序比RA0高的外設是否被不小心打開了。
我還有一次是在configuration裡面使能了JTAG口,結果正好是我要用的那個IO口,導致IO口失效。
引用原文:
Setting an
ANSx bit high will disable the associated digital input
buffer and cause all reads of that pin to return 『0』 while
allowing analog functions of that pin to operate
correctly.