下來了就可以用,程序我自己改來的,有什么不好可以提出來,大家一起交流交流
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
優化二路報警電路圖.png (46.58 KB, 下載次數: 41)
下載附件
這是仿真電路圖,程序和仿真電路圖在兩個包里
2020-2-18 16:45 上傳
單片機源程序如下:
- #include <reg52.h> //調用單片機頭文件
- #define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
- //紅外熱釋電傳感器 平時為0 有輸出為1
- sbit beep = P2^2; //蜂鳴器定義
- sbit red = P2^0; //紅色發光二極管定義
- sbit yellow = P2^1; //黃色發光二極管定義
- sbit hw_one = P1^0; //紅外熱釋傳感器定義
- sbit hw_two = P1^1;
- bit flag_300ms = 0;
- uchar flag_alarm ; //報警標志位
- uint flag_value; //用做定時器的變量
- /***********************1ms延時函數*****************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
- /*************定時器0初始化程序***************/
- void time_init()
- {
- EA = 1; //開總中斷
- TMOD = 0X01; //定時器0工作方式1
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- }
- /******************紅外報警處理**********************/
- void hongwai_dis()
- {
- if(hw_one == 1 && hw_two == 1)//無人
- {
- flag_alarm = 0;//不報警
- red = ~red;//紅燈亮
- yellow = yellow;//黃燈熄滅
- beep = beep;//蜂鳴器不響
- }
- if(hw_one == 0)//表示床上有時,報警提示床無法收縮
- {
- flag_alarm = 1;//報警
- red = red;//紅燈熄
- yellow = ~yellow;//黃燈亮
- beep = ~beep;//蜂鳴器響
- }
- if(hw_two == 0)//表示床板與墻面之間有人時候,報警提示床無法伸開
- {
- flag_alarm = 1;//報警
- red = red;//紅燈熄
- yellow = ~yellow;//黃燈亮
- beep = ~beep;//蜂鳴器響
- }
- }
- /******************主程序**********************/
- void main()
- {
- time_init(); //定時器初始化程序
- beep = 0; //開機叫一聲
- delay_1ms(200);
- P0 = P1 = P2 = P3 = 0xff; //初始化單片機IO口為高電平
- while(1)
- {
- red = ~hw_one; //紅外熱釋電指示燈 有輸出就亮黃燈
- if(flag_300ms == 1)
- {
- flag_300ms = 0;
- hongwai_dis(); //紅外報警函數
- }
- }
- }
- /*************定時器0中斷服務程序***************/
- void time0_int() interrupt 1
- {
- static uint value;
- TH0 = 0x3c;
- TL0 = 0xb0; // 50ms
- value ++;
- if(value % 6 == 0)
- {
- flag_300ms = 1;
- }
- }
復制代碼
全部資料51hei下載地址:
電路圖.rar
(112.51 KB, 下載次數: 73)
2020-2-18 10:50 上傳
點擊文件名下載附件
用的8.6版本 下載積分: 黑幣 -5
程序.rar
(25.63 KB, 下載次數: 51)
2020-2-18 10:50 上傳
點擊文件名下載附件
用的Keil5版本 下載積分: 黑幣 -5
|