㈠ 求51單片機的上升沿和下降沿C語言檢測程序列子,埠就是普通IO口。
這里只講原理,不關注速度。實際設計工作中,已經有很多單片機能夠識別io埠上升沿和下降沿中斷,且方式不止一種。
sbit io_inp=P2^1;輸入端
bit old_bit;輸入端電平記憶
unsigned char low_high;上升下降沿標志,0=無變化,1=上升沿,2、下降沿
void io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void main(void)
{
old_bit=io_inp=P2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此應用
}
}
㈡ 一個51單片機,晶振為12MHz,讓前三個LED燈分別以1ms,1s,5s的頻率閃爍,怎麼用c語言寫,謝謝各位了~~
要實現51單片機上的三個LED燈分別以1ms, 1s, 5s的頻率閃爍,可以通過定時器來控制。首先,我們設定定時器0為16位定時模式,計時50ms。然後設置一個變數進行定時器中斷計數,當計數達到10(即0.5s)時,LED2的狀態取反;當計數達到5000(即2.5s)時,LED3的狀態取反。這樣,LED1將以1ms的頻率閃爍,幾乎無法被人眼察覺;LED2將以1s的頻率閃爍;LED3將以5s的頻率閃爍。
具體實現代碼如下:
#include
unsigned int count = 0;
sbit led1 = P0^0;
sbit led2 = P0^1;
sbit led3 = P0^2;
void main() {
TMOD = 0x01; // 設置定時器0工作模式1
TH0 = (65536 - 500) / 256; // 計時50ms
TL0 = (65536 - 500) % 256;
EA = 1; // 開全局中斷
ET0 = 1; // 開定時器0中斷
TR0 = 1; // 啟動定時器0
}
void time0() interrupt 1 {
led1 = ~led1;
count++;
if (count % 1000 == 0) {
led2 = ~led2;
}
if (count == 5000) {
led3 = ~led3;
count = 0;
}
}
這段代碼中,通過定時器0的中斷服務程序(time0)實現對LED1、LED2和LED3的控制。需要注意的是,在實際應用中,可能需要根據具體硬體環境調整定時器的預設值,以確保定時精度。
為了使LED1的閃爍速度接近1ms,我們通過設定定時器0來計時50ms,再通過中斷計數的方式實現1ms的閃爍頻率。而LED2和LED3則分別以1s和5s的頻率閃爍,通過調整中斷計數的倍數來實現。
這種方法適用於需要精確控制LED閃爍頻率的應用場景。通過這種方式,我們可以輕松地實現不同頻率的LED閃爍,而無需復雜的硬體設計。
以上代碼和方法僅為一種實現思路,具體實現時還需要根據實際情況進行適當調整,確保硬體和軟體的完美配合。
㈢ 51單片機C語言應用程序設計實例精講的介紹
《51單片機C語言應用程序設計實例精講》通過大量的實例,介紹了51單片機各種C語言應用專題程序設計的流程、方法、技巧及設計思想。全書共分31章,第1章~第3章為基礎知識,介紹了51單片機開發的硬體結構、指令系統、C語言設計以及Keil8051C編譯器知識;第4章~第31章為本書的重點,通過28個典型的C語言應用實例,介紹了51單片機的各種應用開發和使用技術,包括輸入,輸出、數據採集,控制系統、存儲系統與外設擴展、信號與演算法實現、網路通信與傳輸、電源監控與抗干擾設計。