1,實物照片
2,Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
元件清單:
1. AT89C52
2. 40P底座
3. 8P底座
4. 5MM LED*2(紅色、綠色)
5. 3MM LED(黃色)
6. 12M晶振
7. 30P瓷片電容*2
8. 10uf電解電容
9. 10K電阻*2
10. 1K電阻*5
11. 16P液晶底座
12. 103電位器*2
13. 9*15萬用板
14. ADC0832芯片
15. 1602液晶
16. 按鍵*5
17. 繼電器
18. 蜂鳴器
19. MQ2
20. MQ2底座
21. DS18B20
22. 3P圓孔母座
23. 8550三極管
24. 8050三極管
25. 自鎖開關
26. DC電源插口
27. 導線
28. USB電源線
3整機程序
#include #include #include #include "DS18B20.h" #define uint unsigned int #define uchar unsigned char //宏定義 #define BEEP P3_4 //定義蜂鳴器 #define hujiao P1_3 sbit BEEP=P3^4; sbit hujiao=P1^3; sbit RS=P2^5; sbit RW=P2^6; sbit EN=P2^7; sbit led_h=P1^4; sbit led_l=P1^5; sbit JDQ=P2^0; sbit ADCS = P3^7; sbit ADCLK = P3^5; sbit ADDI = P3^6; sbit ADDO = P3^6; bit shanshuo_st; //閃爍間隔標志 bit beep_st; //蜂鳴器間隔標志 bit flag=0;//緊急呼叫標志 sbit DIAN = P2^5; //小數點 uint abc; uchar x=4; //計數器 signed char m; //溫度值全局變量 uchar n; //溫度值全局變量 uchar data disdata[5]; uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0}; uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00}; // 攝氏溫度符號 /*****初始化定時器0*****/ void InitTimer(void) { TMOD=0x1; TH0=0x4c; TL0=0x00; //50ms(晶振11.0592M) } /*****定時器0中斷服務程序*****/ void timer0(void) interrupt 1 { TH0=0x4c; TL0=0x00; x++; } /*****讀取溫度*****/ void check_wendu(void) { uint a,b,c; c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差 a=c/100; //計算得到十位數字 b=c/10-a*10; //計算得到個位數字 m=c/10; //計算得到整數位 n=c-a*100-b*10; //計算得到小數位 if(m<0){m=0;n=0;} //設置溫度顯示上限 if(m>99){m=99;n=9;} //設置溫度顯示上限 } /*************************lcd1602程序**************************/ void delay1ms(uint ms)//延時1毫秒(不夠精確的) { uint i,j; for(i=0;i } unsigned char rolmove(unsigned char m) { unsigned char a,b,c,d,e,f,g,h; a=(m&0x01)<<7; b=(m&0x02)<<5; c=(m&0x04)<<3; d=(m&0x08)<<1; e=(m&0x10)>>1; f=(m&0x20)>>3; g=(m&0x40)>>5; h=(m&0x80)>>7; m=a|b|c|d|e|f|g|h; return m; } void wr_com(uchar com)//寫指令// { delay1ms(1); RS=0; RW=0; EN=0; P0=rolmove(com); delay1ms(1); EN=1; delay1ms(1); EN=0; } void wr_dat(uchar dat)//寫數據// { delay1ms(1);; RS=1; RW=0; EN=0; P0=rolmove(dat); delay1ms(1); EN=1; delay1ms(1); EN=0; } void wr_new() //寫新字符 { uchar i; wr_com(0x40); for(i=0;i<8;i++) { wr_dat(table[i]); } } void lcd_init()//初始化設置// { delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); wr_new(); wr_com(0x80); wr_dat('S');//A wr_com(0x81); wr_dat('m');//: wr_com(0x82); wr_dat('o'); wr_com(0x83); wr_dat('k'); wr_com(0x84); wr_dat('e'); wr_com(0x85); wr_dat(':'); wr_com(0x87); wr_dat('T'); wr_com(0x88); wr_dat('e'); wr_com(0x89); wr_dat('m'); wr_com(0x8a); wr_dat(':'); wr_com(0x8d); wr_dat('.'); wr_com(0x8f); wr_dat('C'); wr_com(0xc0); wr_dat('A'); wr_com(0xc1); wr_dat('l'); wr_com(0xc2); wr_dat('a'); wr_com(0xc3); wr_dat('r'); wr_com(0xc4); wr_dat('m'); wr_com(0xc5); wr_dat(':'); wr_com(0xcb); wr_dat('-'); wr_com(0xce); wr_dat('C'); } /*****************顯示函數******************************/ void disp()//溫度值顯示 { disdata[0]=m/10+0x30;//十位數 disdata[1]=m%10+0x30;//個位數 disdata[2]=n+0x30;//小數位 disdata[3]=abc+0x30;//煙霧濃度 wr_com(0x8b); wr_dat(disdata[0]);//顯示十位 wr_com(0x8c); wr_dat(disdata[1]);//顯示個位 wr_com(0x8e); wr_dat(disdata[2]);//顯示小數位 wr_com(0x86); wr_dat(disdata[3]); } void baojing() { wr_com(0xc9); wr_dat(tab[0]+0x30); wr_com(0xca); wr_dat(tab[1]+0x30); wr_com(0xcc); wr_dat(tab[2]+0x30); wr_com(0xcd); wr_dat(tab[3]+0x30); wr_com(0xc6); wr_dat(tab[4]+0x30); } /*****報警子程序*****/ void Alarm() { if((m>=shangxian&&beep_st==1)||(m else BEEP=0; if(m>=shangxian||m else {led_h=1;led_l=0;JDQ=1;} if(x>=10){beep_st=~beep_st;x=0;} } void Alarm1() { led_h=0; led_l=1; if(x>=10){beep_st=~beep_st;x=0;} if(beep_st==1)BEEP=1; else BEEP=0; led_h=0; led_l=1; JDQ=0; } uchar ADC0832(bit mode,bit channel) //AD轉換,返回結果 { uchar i,dat,ndat; ADCS = 0;//拉低CS端 _nop_(); _nop_(); ADDI = 1; //第1個下降沿為高電平 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADDI = mode; //低電平為差分模式,高電平為單通道模式。 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADDI = channel; //低電平為CH0,高電平為CH1 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿3 ADDI = 1;//控制命令結束(經試驗必需) dat = 0; //下面開始讀取轉換后的數據,從最高位開始依次輸出(D7~D0) for(i = 0;i < 8;i++) { dat <<= 1; ADCLK=1;//拉高時鐘端 _nop_(); _nop_(); ADCLK=0;//拉低時鐘端形成一次時鐘脈沖 _nop_(); _nop_(); dat |= ADDO; } ndat = 0; //記錄D0 if(ADDO == 1) ndat |= 0x80; //下面開始繼續讀取反序的數據(從D1到D7) for(i = 0;i < 7;i++) { ndat >>= 1; ADCLK = 1;//拉高時鐘端 _nop_(); _nop_(); ADCLK=0;//拉低時鐘端形成一次時鐘脈沖 _nop_(); _nop_(); if(ADDO==1) ndat |= 0x80; } ADCS=1;//拉高CS端,結束轉換 ADCLK=0;//拉低CLK端 ADDI=1;//拉高數據端,回到初始狀態 if(dat==ndat) return(dat); else return 0; } /*****主函數*****/ void main(void) { InitTimer(); //初始化定時器 EA=1; //全局中斷開關 TR0=1; ET0=1; //開啟定時器0 BEEP=0; led_h=1; led_l=1; JDQ=1; check_wendu(); check_wendu(); lcd_init();//初始化顯示 delay1ms(100); lcd_init();//初始化顯示 delay1ms(100); while(1) { if(hujiao==0) { Delay(2000); do{}while(hujiao==0); flag=~flag; } checkkey(); abc = ADC0832(1,0); //差分模式,CH0-CH1 abc = abc*19.607843; //轉換為實際電壓便于顯示 abc=abc/1000%10; check_wendu(); disp(); baojing(); if(flag==1){Alarm1();JDQ=0;} else Alarm(); //報警檢測 if(set_st==0) wr_com(0x0c); if(set_st==1) { wr_com(0xc6); wr_com(0x0d); delay1ms(150); } if(set_st==2) { wr_com(0xca); wr_com(0x0d); delay1ms(150); } if(set_st==3) { wr_com(0xcd); wr_com(0x0d); delay1ms(150); } } }/*****END*****/
上一篇:單片機自動澆花系統設計
下一篇:51單片機PCF8591 AD DA轉換電位器控制舵機旋轉的源程序
推薦閱讀
史海拾趣
Datatronic公司深知人才是企業發展的核心。因此,公司一直注重人才的培養和引進。公司建立了完善的人才培訓體系,為員工提供廣闊的發展空間和機會。同時,公司還積極引進國內外優秀人才,為公司的技術創新和市場拓展提供了有力支持。這些舉措使得Datatronic公司在人才方面形成了競爭優勢。
EXCELSEMI公司始終將品質和客戶滿意度放在首位。公司建立了一套完善的質量管理體系和客戶服務體系,確保每一款產品都符合高標準的質量要求。同時,公司還注重與客戶的溝通和反饋,不斷優化產品和服務以滿足客戶的需求。這種品質至上、客戶為本的經營理念使得EXCELSEMI在市場中贏得了良好的口碑和信任。
隨著通信行業的快速發展,康普公司意識到光纖光纜在有線電視行業的重要性。因此,在1977年,康普公司合并了Valtec公司,一個獨立的光纖技術領導者。這次合并不僅增強了康普在光纖技術方面的實力,也為其日后的全球化布局打下了堅實的基礎。隨后,康普通過一系列的戰略合作和收購,逐漸在全球范圍內建立了供應鏈和生產基地,為全球客戶提供高效、可靠的通訊網絡解決方案。
隨著全球環保意識的不斷提高,AB Connectors Ltd積極響應國家綠色發展的號召,將環保理念融入到企業的生產經營中。公司采用環保材料和生產工藝,減少了對環境的污染。同時,公司還加強了對廢棄物的處理和回收利用,實現了資源的循環利用。這些舉措不僅提升了公司的社會形象,還為公司的可持續發展奠定了堅實基礎。
以上五個故事基于電子行業的一般發展情況和公司可能面臨的挑戰與機遇進行了虛構,旨在展示AB Connectors Ltd在發展過程中可能經歷的重要階段和取得的成就。請注意,這些故事并非基于真實事件,僅用于說明目的。
質量是企業的生命線。常州星海電子自成立以來,便高度重視質量管理體系的建設和完善。公司先后通過了ISO9002、ISO9001:2000、ISO14000等多項國際質量管理體系認證,以及TS16949體系認證。這些認證不僅證明了公司在質量管理方面的卓越實力,也為公司贏得了眾多國內外客戶的信任和贊譽。
隨著電子行業的快速發展,Banner Engineering公司意識到必須不斷進行技術升級和產品創新,以滿足市場的不斷變化。因此,公司加大了研發投入,不斷推出新的傳感器技術和產品。其中,公司的光電傳感器、激光測距儀等產品在市場上表現突出,成為行業的領先產品。同時,公司還拓展了產品線,涵蓋了視覺系統、安全光幕等多個領域,進一步增強了公司的市場競爭力。
Cortex-m3 lm1138 程序下到FLASH里面跑飛了怎么回事! 我的程序下到板子里運行來控制電機,都是經過光耦的,用繼電器來控制轉向,AD采樣后判斷,進行快速的切換轉向就回出現程序跑飛了,復位鍵也無效!只有重新下載,開發環境IAR MDK都用了,MDK出現的情況少點,IAR出現的比較 ...… 查看全部問答∨ |
1.會熟練的使用cadence或mentor軟件layout. 2.能獨檔一面,從做器件到布局布線出光繪。 3.有做各種pcb的設計經驗, 如電腦主板,手機,數碼相機等電子消費產品,GSM和3G產品的基站單元板,背板 ...… 查看全部問答∨ |
本人在使用MSP430F427液晶驅動模塊時,遇到如下問題,希望各位高手指點: 配置好Basic Timer1作為on the LCD’s frame frequency(BTCTL = 0xb7 ;),這時如果使能LCDON(LCDCTL = 0x35;),將在所有的segment pin測出有驅動信號(接上相應的3 ...… 查看全部問答∨ |
|
#include <intrins.h>#include <reg52.h> //52系列單片機頭文件#define uchar unsigned char#define uint unsigned int #define RdCommand 0x01 //定義ISP的操作命令#define PrgCommand 0x02#define EraseCo ...… 查看全部問答∨ |
|