日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

入门项目·电动车报警器

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 入门项目·电动车报警器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄

目錄

前言

1.3.1 硬件清單列表

1.3.2 振動傳感器控制燈

1.3.3 繼電器工作邏輯?

1.3.4 遙控發送接收433M

1.3.5?項目開發

二. 定時器

1.4?簡介

1.5?定時器怎么定時

1.6?定時器編程

1.7?定時器中斷方式控制

1.8?遇見瀟瀟遇見你,不負代碼不負卿

前言

1.3.1 硬件清單列表

????????振動傳感器模塊,繼電器模塊,433M無線模塊,反應出來的代碼都是高低電平,跟以上學習按鍵點亮LED 并沒有區別 ,但是做出來有樂趣,好玩刺激! 器件連接圖:

1.3.2 振動傳感器控制燈

????????通過我們已經掌握的LED來了解下振動傳感器是怎么回事
  • ????????如何知道是否發生振動
  • ????????振動后的信號表現又是什么
  • ????????振動傳感器控制燈
#include "reg52.h" #include "intrins.h"sbit led1 = P3^7;//根據原理圖(電路圖),設備變量led1指向P3組IO口的第7口 sbit vibrate = P3^3;//Do接到了P3.3口void Delay2000ms() //@11.0592MHz {unsigned char i, j, k;// _nop_();i = 15;j = 2;k = 235;do{do{while (--k);} while (--j);} while (--i); } void main() {//查詢方式判斷是否發生震動while(1){if(vibrate == 0)//模塊說明告訴我們,震動的話,D0輸出低電平{led1 = 0;//亮燈Delay2000ms();led1 = 1;}else{led1 = 1;//滅燈}} }

1.3.3 繼電器工作邏輯?

????????其實就是電子開關,怎么開怎么關弄清楚就可以了
  • ????????怎么控制“閉合開關呢
  • ????????怎么控制"斷開"開關呢

通過繼電器來控制電路,比如智能插座,比如220V的燈,比如我們項目不帶開關的傻瓜式報警器 當設置繼電器為低電平處罰時,STC89C52RCIO輸出低電平,就會導致COM口和NO口閉合,也 就是完成報警器的串聯電路,開始響 現在我們就可以來寫程序,完成振動控制警報的功能 #include "reg52.h" #include "intrins.h"sbit vibrate = P3^3;//Do接到了P3.3口 sbit switcher = P1^1;void Delay2000ms() //@11.0592MHz {unsigned char i, j, k;_nop_();i = 15;j = 2;k = 235;do{do{while (--k);} while (--j);} while (--i); } void main() {//查詢方式判斷是否發生震動while(1){if(vibrate == 0)//模塊說明告訴我們,震動的話,D0輸出低電平{//當發生震動適合,導通繼電器,給繼電器IN一個低電平switcher = 0;Delay2000ms();switcher = 1;//高電平,繼電器N0和COM不通}else{switcher = 1;}} }

?1.3.4 遙控發送接收433M

https://wenku.baidu.com/view/8fe8f444bed5b9f3f80f1c33.html
  • 遙控按下后信號怎么被接收
  • 接收后的信號表現又是什么
  • 遙控控制LED
#include "reg52.h"sbit D0_ON = P1^2; sbit D1_OFF = P1^3; sbit switcher = P1^1;void main() {//查詢方式哪個按鍵被按下while(1){if(D0_ON == 1)//收到遙控信號A,D0表現為高電平{//A被按下,我們導通繼電器,給繼電器IN一個低電平switcher = 0;}if(D1_OFF == 1)//收到遙控信號C,D1表現為高電平{//B被按下,我們不導通繼電器,給繼電器IN一個高電平switcher = 1;}} }

1.3.5?項目開發

  • 接線

  • 開發流程代碼?
#include "reg52.h" #include<intrins.h> #define J_ON 1 #define J_OFF 0sbit switcher = P1^0; sbit D0_ON = P1^1; sbit D1_OFF = P1^2; sbit vibrate = P1^3;void Delay2000ms() //@11.0592MHz {unsigned char i, j, k;_nop_();i = 15;j = 2;k = 235;do{do{while (--k);} while (--j);} while (--i); } void Delay500ms() //@11.0592MHz {unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i); } void main() {int mark = J_OFF;while(1){//1. 如果a按鍵被按下,設定為開啟警報模式if(D0_ON == 1){//長響,表示進入警報模式switcher = 0;Delay2000ms();switcher = 1;//設定警報模式標記mark = J_ON ;}//2. 如果b按鍵被按按下,設定為關閉警報模式if(D1_OFF == 1){//短響,表示進入解除警報模式switcher = 0;Delay500ms();switcher = 1;//設定警報解除模式標記mark = J_OFF ;}//3. 如果標記是在警報模式下if(mark == J_ON){//3.1 如果發生了震動if(vibrate == 0){//喇叭響,給繼電器低電平,導通switcher = 0;}else{ //3.2 如果不發生震動//喇叭不響,給繼電器高電平,不導通switcher = 1;}}} }

. 定時器

1.4?簡介

  • C51中的定時器和計數器是同一個硬件電路支持的,通過寄存器配置不同,就可以將他當做定時器 或者計數器使用。
  • 確切的說,定時器和計數器區別是致使他們背后的計數存儲器加1的信號不同。當配置為定時器使 用時,每經過1個機器周期,計數存儲器的值就加1。而當配置為計數器時,每來一個負跳變信號 (信號從P3.4 或者P3.5引腳輸入),就加1,以此達到計數的目的。
  • 標準C512個定時器/計數器:T0T1。他們的使用方法一致。C52相比C51多了一個T2
1.4.1 概念解讀
  • 定時器和計數器,電路一樣
  • 定時或者計數的本質就是讓單片機某個部件數數
  • 當定時器用的時候,靠內部震蕩電路數數
  • 當計數器用的時候,數外面的信號,讀取針腳的數據

1.5?定時器怎么定時

定時器的本質原理: 每經過一個機器周期,就加1 :寄存器 思考:
  • 什么是晶振
晶振(晶體震蕩器),又稱數字電路的心臟,是各種電子產品里面必不可少的頻率元器件。數字電 路的所有工作都離不開時鐘,晶振的好壞、晶振電路設計的好壞,會影響到整個系統的穩定性。
  • 什么是時鐘周期
時鐘周期也稱為振蕩周期,定義為時鐘頻率倒數。時鐘周期是計算機中最基本的、最小的時間單 位。在一個時鐘周期內,CPU僅完成一個最基本的動作。時鐘周期是一個時間的量。更小的時鐘周 期就意味著更高的工作頻率
  • 什么是機器周期
機器周期也稱為CPU周期。在計算機中,為了便于管理,常把一條指令的執行過程劃分為若干個階 段(如取指、譯碼、執行等),每一階段完成一個基本操作。完成一個基本操作所需要的時間稱為 機器周期。一般情況下,一個機器周期由若干個時鐘周期組成

  • 1經過了多少時間
當晶振頻率是11.0592MHz的時候,等于11059.2KHz = 11059200Hz 機器周期 = 12 x 時鐘周期 =12 x (1/時鐘頻率) = 12 / 時鐘頻率 秒 = 12 / 11059200 = 12 000 000 / 11059200 微秒 = 1.085 微秒

1.6?定時器編程

????????相關寄存器:

  • 在哪里加1,最大計數時間,也就是爆表了能計算多長
TH0/1TL0/1寄存器中加1,默認是從0開始數數,最多能數65536下,累計計時71ms
  • 如何算出10ms定時器的初值
?就不讓他從0開始數數,10ms需要數9216下,你讓他從65536-9126=5632016進制表示為 0xDC00)開始數數 ????????這樣TL0=0x00;TH0=0xDC
  • 關于TCON

  • 怎么知道爆表
TCON寄存器的bit5TF0)能表示爆表:當爆表的時候,硬件會修改bit5(TF0)位上面的數據,改成 1(置1),如果不用中斷,我們代碼清零
  • 怎么開始計時
TCON寄存器的bit4,通過編程讓這個位為1的時候,開始計時,相當于按下了鬧鐘
  • 定時器使用是有很多種模式的
定時器模式寄存器:TMOD來選擇定時器模式,選擇工作方式1TMODbit0 bit1配置成0 1 16 的定時器功能
  • 四個二進制數表示一位的16進制數
  • 8421法進制的轉換(方便人類來看,對計算機底層來說,不關心進制010101010
  • 配寄存器推薦用按位操作,清零的時候,對應的需要清零的位與上0,不需要清零的位與上1
  • 置1的時候,需要置1的位置或1,不需要置一的位置或0
/*通過定時器0,控制LED亮一秒,滅一秒,晶振11059200Hz*/ #include "reg52.h"sbit led = P3^6;void main() {int cnt = 0;led = 1;//1. 配置定時器0工作模式位16位計時TMOD = 0x01;1.4 定時器中斷方式控制中斷寄存器CPU能響應定時器0中斷的條件:需要配置IE寄存器的bit1: ET0 bit7:EA1. ET0中斷允許要置一 ET0 = 12. EA總中斷要置一 EA = 1硬件內部設計邏輯如下圖://2. 給初值,定一個10ms出來TL0=0x00;TH0=0xDC;//3. 開始計時TR0 = 1;TF0 = 0;while(1){if(TF0 == 1)//當爆表的時候,硬件會修改bit5(TF0)位上面的數據,改成1{TF0 = 0;//不用中斷,必須軟件清零cnt++; //統計爆表的次數//重新給初值TL0=0x00;TH0=0xDC;if(cnt == 100){ //爆表100次,經過了1scnt = 0; //當100次表示1s,重新讓cnt從0開始,計算下一次的1sled = !led;//每經過1s,翻轉led的狀態}}} }

1.7?定時器中斷方式控制

????????中斷寄存器

?CPU能響應定時器0中斷的條件:需要配置IE寄存器的bit1: ET0 bit7:EA

????????1. ET0中斷允許要置一 ET0 = 1 ????????2. EA總中斷要置一 EA = 1 硬件內部設計邏輯如下圖: #include "reg52.h"sbit led = P3^6; sbit led1 = P3^7;int cnt = 0; void Time0Init() {//1. 配置定時器0工作模式位16位計時TMOD = 0x01;//2. 給初值,定一個10ms出來TL0=0x00;TH0=0xDC;//3. 開始計時,定時器"數數"TR0 = 1;TF0 = 0;//4. 打開定時器0中斷ET0 = 1;//5. 打開總中斷EAEA = 1; } void Delay300ms() //@11.0592MHz 軟件延時,CPU“數數” {unsigned char i, j, k;i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i); } void main() {led = 1;Time0Init();while(1){led1 = 0;Delay300ms();led1 = 1;Delay300ms();} } void Time0Handler() interrupt 1 {cnt++; //統計爆表的次數//重新給初值TL0=0x00;TH0=0xDC;if(cnt == 100){//爆表100次,經過了1scnt = 0; //當100次表示1s,重新讓cnt從0開始,計算下一次的1sled = !led;//每經過1s,翻轉led的狀態} }

1.8?遇見瀟瀟遇見你,不負代碼不負卿

總結

以上是生活随笔為你收集整理的入门项目·电动车报警器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。