發布日期:2022-05-11 點擊率:40
單片機進行傳感器計數
單片機源程序如下:
#include
bai=dispcount/100; //求百位
shi=dispcount%100/10; //求十位
ge=dispcount%10; //求個位
dula=1; //打開段選
P0=table[bai]; //百位輸給P0口
dula=0; //關閉段選
wela=1; //打開位選
P0=0xfe; //P0口輸給第一位
wela=0; //關閉位選
delay(1);
dula=1;
P0=table[shi];
dula=0;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0xfb;
wela=0;
delay(1);
}
void init()
{
wela=0;
dula=0;
EX0=1; //int0外部中斷打開。
IT0=0; //低電平有效,3.0口,不設置也沒關系
// ET0=1; //t0定時中斷。即IE=0x82;
// TMOD=0x01; //t0啟動方式為方式1,16位
// TR0=1; //啟動定時器0
// TH0=0x4c;
// TL0=0x00;
EA=1; //開總中斷
}
void main()
{
// aa=0;
// TH0=0x4c;
// TL0=0x00;
init();
while(1)
{
display(dispcount);
}
}
void ExtInt0() interrupt 0 //外部0中斷服務程序
{
delay(200);
date++;//每按一次中斷按鍵,計數加一
dispcount=date;
if (dispcount==999) //計數范圍0-999
{
dispcount=0;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
傳感器計數.rar
(26.47 KB, 下載次數: 13)
2017-12-19 15:08 上傳
點擊文件名下載附件
xgy1982
沒有四種聲音的頻率庫,其他的給你做個示范吧:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
SETB EA
SETB ET0
SETB ET1
LOOP:
LCALL KEYSCAN
MOV A,R2
JNZ LP1
MOV DPTR,#TAB110
SJMP LPRUN
LP1:
DEC A
JNZ LP2
MOV DPTR,#TAB119
SJMP LPRUN
LP2:
DEC A
JNZ LP3
MOV DPTR,#TAB120
SJMP LPRUN
LP3:
DEC A
JNZ LP4
MOV DPTR,#TABBOMB
SJMP LPRUN
LP4:
LJMP LOOP
LPRUN:
MOVX A,@DPTR
MOV TL0,A
INC DPTR
MOVX A,@DPTR
MOV TH0,A
............;時長控制也可以做到表里,計算后賦值給T1
LJMP LOOP
END
評論
取消
評論
#include “reg52.h” //此文件中定義了單片機的一些特殊功能寄存器
#include"temp.h" //這里面有個溫度的函數
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//code的作用是告訴單片機,我定義的數據要放在ROM(程序存儲區)里面,其實是相當與匯編里面的尋址MOVX(好像是),因為C語言中沒辦法詳細描述存入的是ROM還是RAM(寄存器),所以在軟件中添加了這一個語句起到代替匯編指令的作用,對應的還有data是存入RAM的意思
//Ds18b20ReadTemp()這個函數 就是頭文件里的 應該是省略了一些物理的計算
類似于 電流的大小 電壓 在根據產品的材料 算出 溫度的值 傳給你
這個值還是要處理一下
邏輯不必去思考 畢竟這是人家算好給出來的值 既然它讓我們去這么處理 我們就這么處理
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數點后面。
這句話 其實有點重要 c語言會自動幫你做類型轉化
所以四舍五入就沒有用函數 我記得js還要MATH函數處理 下次我也這么寫四舍五入
會不會出問題不太清楚
void DigDisplay()
{
u8 i;
for(i=0;i<6;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
}
P0=DisplayData[5-i];//發送數據
delay(100); //間隔一段時間掃描
P0=0x00;//消隱
}
}
這個函數 就是一秒執行幾百次
然后 你就能看到多個數組
像我這種動態視力優秀的人 看著 就是一堆閃爍的燈 花里胡哨的
人類的動態視力真弱 這就被欺騙了;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
這三個 只要用到了數碼管
三個數字 就是2的三次方 就是 有八種情況 然后這八種情況對應一個數字
一個數字有八個二極管
所以就是
P0=DisplayData[5-i];就是 1111 1110 ,隨便寫的 控制八個燈的亮的方式
就是用三個開關控制8個燈的開關 ;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
所以這里是設計好的10個亮燈的方式 ;
這個可以看出溫度給出的是個四位數字 再把這個四位數字拆出來 放到led里面顯示
P0=0x00;//消隱 這個我不太了解 他是加我就加吧
SW-420 常閉型震動模塊簡介
感應震動力大小將感應結果傳遞到電路裝置,并使電路啟動工作的電子開關。
用于各種震動觸發作用,報盜報警,智能小車,地震報警,摩托車報警等。本模塊與常開型震動傳感器模塊相比、震動觸發的時間更長、可以驅動繼電器模塊。
工作原理
平時任何角度開關都是接通狀態,受到振動或移動時,開關內導通電流的滾軸會產生移動或振動,從而導致通過的電流斷開或電阻阻值的升高而觸發電路。這種開關的特點是平時一般處于導通狀態耐振動時會短暫斷開,所以它的靈敏度很高,通過IC的設置,客戶可按自
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線路圖控制原