|
(1)打印電路板將繪制好的電路板用轉(zhuǎn)印紙打印出來,注意滑的一面面向自己,一般打印兩張電路板,即一張紙上打印兩張電路板。在其中選擇打印效果最好的制作線路板。
(2)裁剪覆銅板用感光板制作電路板全程圖解 。覆銅板,也就是兩面都覆有銅膜的線路板,將覆銅板裁成電路板的大小,不要過大,以節(jié)約材料。
0.png (44.87 KB, 下載次數(shù): 119)
下載附件
2018-11-17 15:24 上傳
制作出來的實(shí)物圖如下:
實(shí)物.png (1.64 MB, 下載次數(shù): 91)
下載附件
實(shí)物
2018-11-17 10:44 上傳
電路原理圖如下:
原理圖.png (62.04 KB, 下載次數(shù): 105)
下載附件
總圖
2018-11-17 10:44 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真.png (29.63 KB, 下載次數(shù): 123)
下載附件
仿真
2018-11-17 10:44 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (8.35 KB, 下載次數(shù): 112)
下載附件
2018-11-17 15:24 上傳
pcb.png (45.73 KB, 下載次數(shù): 87)
下載附件
pcb
2018-11-17 10:44 上傳
/*元器件列表
材料 數(shù)量
LCD1602 1
蜂鳴器 1
USB母座 1
89c52 1
9腳103排阻 1
電阻10K 1
電阻1k 1
電阻4.7K 2
電位器10k 1
電解電容10uf 1
電容30pf 2
11.0592晶振 1
三極管pnp8550 1
四腳按鍵 5
排針 8
排針母座20p 1
穩(wěn)定傳感器18B20 1
插座40腳 1
覆銅板15X20 1
三腳開關(guān) 1
*/
熱電偶.jpg (6.4 KB, 下載次數(shù): 81)
下載附件
電偶
2018-11-17 10:44 上傳
18b20溫度表.gif (9.24 KB, 下載次數(shù): 86)
下載附件
碼表
2018-11-17 10:44 上傳
按鍵.png (12.03 KB, 下載次數(shù): 71)
下載附件
控制
2018-11-17 10:44 上傳
蜂鳴器.png (15.08 KB, 下載次數(shù): 75)
下載附件
報(bào)警
2018-11-17 10:44 上傳
工作圖.jpg (59.44 KB, 下載次數(shù): 86)
下載附件
51系統(tǒng)
2018-11-17 10:44 上傳
lcd.png (20.94 KB, 下載次數(shù): 85)
下載附件
1602
2018-11-17 10:44 上傳
lcd實(shí)物.jpg (68.32 KB, 下載次數(shù): 81)
下載附件
1602實(shí)物
2018-11-17 10:44 上傳
單片機(jī)源程序如下:
- #include <REGX52.H>
- sbit keyu=P3^4;//加按鍵
- sbit keyl=P3^5;//減按鍵
- sbit keyh=P3^6;//調(diào)節(jié)尺度
- sbit keym=P3^7; //轉(zhuǎn)換模式
- sbit RS=P2^5;//數(shù)據(jù)/命令選擇端(H/L)
- sbit RW=P2^6;//讀/寫端(H/L)
- sbit EN=P2^7;//使能
- sbit DQ=P2^0; //DS18B20接入口
- sbit buzz=P2^1;//蜂鳴器接口 -
- bit f=1; //正負(fù)溫度標(biāo)志位
- unsigned char m=1,y=0,o=0;//寄存器
- unsigned int sdata;//存放整數(shù)溫度
- unsigned char xiaoshu1; //存放小數(shù)后第一位溫度數(shù)值
- unsigned char xiaoshu2; //存放小數(shù)后第二位溫度數(shù)值
- unsigned char code huany[]=" Welcome to use "; //歡迎使用
- unsigned char code tt[] =" ter thermometer"; //溫度計(jì)
- unsigned char code duqu[]=" loading... "; //讀取
- unsigned char code tab1[]=" T: C M "; //框架
- unsigned char code tab2[]="U: L: ";
- unsigned char code shuzu[]="0123456789+- .*"; //數(shù)字,,10加號,,,11減號,,,12空格,,,,13點(diǎn),,,,14*
- unsigned char u=40;//上限
- char l=15,p;
- //下限
- void delay_50us(unsigned int t) //延時(shí)函數(shù)
- {
- unsigned int j,k;
- for (;t>0;t--)
- {
- for(j=10;j>0;j--)
- {
- for(k=1;k>0;k--);
- }
- }
- }
- void button() //報(bào)警蜂鳴器
- {
- unsigned char k=2;
- while(k--)
- {
- buzz=0;delay_50us(200);
- buzz=1;delay_50us(200);
- }
- }
- ///lcd
- void write_com(unsigned com)//寫操縱
- {
- EN=0;
- RS=0;
- RW=0;
- P0=com;
- delay_50us(1);
- EN=1;
- delay_50us(5);
- EN=0;
- }
- void write_data(unsigned char dat)//寫數(shù)據(jù)
- {
- EN=0;
- RS=1;
- RW=0;
- P0=dat;
- delay_50us(1);
- EN=1;
- delay_50us(5);
- EN=0;
- }
- void init(void)//初始化
- {
- delay_50us(5);
- write_com(0x38);
- delay_50us(1);
- write_com(0x38);
- delay_50us(1);
- write_com(0x38);
- write_com(0x38);
- write_com(0x08); //只開顯示
- write_com(0x01); //清屏
- write_com(0x06);//地址加1,當(dāng)寫入數(shù)據(jù)的時(shí)候光標(biāo)右移
- write_com(0x0C); //開顯示,不顯示光標(biāo)
- }
- void delay_18B20(unsigned int i) //18b20全局延時(shí)
- {
- while(i--);
- }
- ///////////////////////////////////18b20//////////////////////////////////////////////////
- //初始化傳感器函數(shù)
- Init_DS18B20(void)
- {
- unsigned char x=0;
- DQ=1;//DQ復(fù)位
- delay_18B20(10);//稍做延時(shí)
- DQ=0;//單片機(jī)將DQ拉低
- delay_18B20(80);//精確延時(shí)大于480us
- DQ=1;//拉高總線
- delay_18B20(20);
- x=DQ;//稍做延時(shí)后如果x=0則初始化成功x=1則初始化失敗
- delay_18B20(30);
- return x;
- }
- //讀一個(gè)字節(jié)
- ReadOneChar(void)
- {
- unsigned char i=0;
- unsigned char dat=0;
- for(i=8;i>0;i--)
- {
- DQ=0;//給脈沖信號
- dat>>=1;
- DQ=1;//給脈沖信號
- if(DQ)
- dat|=0x80;
- delay_18B20(4);
- }
- return(dat);
- }
- //寫一個(gè)字節(jié)
- WriteOneChar(unsigned char dat)
- {
- unsigned char i=0;
- for(i=8;i>0;i--)
- {
- DQ=0;
- DQ=dat&0x01;
- delay_18B20(5);
- DQ=1;
- dat>>=1;
- }
- return(dat);
- }
- void ReadTemperature(void)
- {
- unsigned char L=0;
- unsigned char H=0;
- Init_DS18B20();
- WriteOneChar(0xCC);//跳過讀序號列號的操作
- WriteOneChar(0x44);//啟動(dòng)溫度轉(zhuǎn)換
- delay_18B20(100);
- Init_DS18B20();
- WriteOneChar(0xCC);//跳過讀序號列號的操作
- WriteOneChar(0xBE);//讀取溫度寄存器等(共可讀9個(gè)寄存器前兩個(gè)就是 溫度
- L=ReadOneChar();
- H=ReadOneChar();
- if(H>0xf8) //高位前五位為1時(shí)溫度是負(fù)
- {
- L=~L+1;
- H=~H;
- f=0; //讀取溫度為負(fù)時(shí)fg=0
- sdata = L/16+H*16; //整數(shù)部分
- xiaoshu1 = (L&0x0f)*10/16; //小數(shù)第一位
- xiaoshu2 = (L&0x0f)*100/16%10; //小數(shù)第二位
- }
- //傳感器返回值除16得實(shí)際溫度值
- //為了得到2位小數(shù)位,先乘100,再除16,考慮整型數(shù)據(jù)長度,
- else
- {
- f=1;
- sdata = L/16+H*16; //整數(shù)部分
- xiaoshu1 = (L&0x0f)*10/16; //小數(shù)第一位
- xiaoshu2 = (L&0x0f)*100/16%10; //小數(shù)第二位
- }
- }
- ///////////////////18b20結(jié)束/////////////
- void display0()//顯示welcome to use the
- {
- unsigned char i,w,h=0x8f,i1,w1,h1=0xcf,w2,i2,h2,g=2;
- init();
- for(w=0;w<16;w++) //顯示歡迎
- {
- write_com(h--);//第一行自減左移
- for(i=0;i<16;i++)
- {
- write_data(huany[i]);
- delay_50us(15);
- }
- }
- for(w1=0;w1<16;w1++)//第二行自減左移
- {
- write_com(h1--);
- for(i1=0;i1<16;i1++)
- {
- write_data(tt[i1]);
- delay_50us(15);
- }
- }
- delay_50us(5000);//顯示loading
- init();
- write_com(0x80);
- for(w2=0;w2<16;w2++)//向右顯示
- {
- write_data(duqu[w2]);
- delay_50us(200);
- }
- while(g--)//小數(shù)點(diǎn)循環(huán)亮滅
- {
- write_com(0x8a);
- for(i2=0;i2<3;i2++)
- {
- write_data(duqu[i2]);
-
- }
- write_com(0x8a);
- for(h2=10;h2<14;h2++)
- {
- delay_50us(300);
- write_data(duqu[h2]);
- delay_50us(300);
- }
- }
-
- }
- void display1() //顯示框架
- {
- unsigned char p,q;
- init();//全局清零
- write_com(0x80);
- for(q=0;q<16;q++)//顯示TMHL
- {
- write_data(tab1[q]);
- }
- write_com(0xc1);
- for(p=0;p<16;p++)
- write_data(tab2[p]);
- }
- void display2()//顯示上下限溫度 ,尺度
- {
- //尺度
-
- write_com(0x8e);
- write_data(shuzu[m/10]);//十位
- write_com(0x8f);
- write_data(shuzu[m%10]);//個(gè)位
- if(o==1) //上限選中標(biāo)志*號可操作
- {
- write_com(0xc0);
- write_data(shuzu[14]);
- write_com(0xca);
- write_data(shuzu[12]);
- }
- else if(o==2) //下限選中標(biāo)志*號可操作
- {
- write_com(0xca);
- write_data(shuzu[14]);
- write_com(0xc0);
- write_data(shuzu[12]);
- }
- else if(o==0) //隱藏*號不可操作
- {
- write_com(0xca);
- write_data(shuzu[12]);
- write_com(0xc0);
- write_data(shuzu[12]);
- }
- if(u/100==0) //上限100內(nèi)溫度
- {
- write_com(0xc3);
- write_data(shuzu[12]);//空格
- write_com(0xc4);
- write_data(shuzu[u/10]);//十位
- write_com(0xc5);
- write_data(shuzu[u%10]);//個(gè)位
- }
- else if (u/100==1)//上限100外溫度
- {
- write_com(0xc3);
- write_data(shuzu[u/100]);//百位
- write_com(0xc4);
- write_data(shuzu[(u-100)/10]);//十位
- write_com(0xc5);
- write_data(shuzu[u%10]);//個(gè)位
- }
- //下限溫度
- if (l<0)//下限低于0的溫度顯示
- {
- p=-l;
- write_com(0xcD);
- write_data(shuzu[11]);//負(fù)號
- write_com(0xcE);
- write_data(shuzu[p/10]);
- write_com(0xcF);
- write_data(shuzu[p%10]);
- }
- else if(l>=0)//下限高于0的溫度顯示
- {
- write_com(0xcD);
- write_data(shuzu[12]);
- write_com(0xcE);
- write_data(shuzu[l/10]);
- write_com(0xcF);
- write_data(shuzu[l%10]);
- }
- }
- void fuhao() //溫度正負(fù)子程序
- {
- if(f==1) //溫度為正
- {
- write_com(0x83);
- write_data(shuzu[12]);
- }
- else if(f==0) //溫度為負(fù),顯示負(fù)號
- {
- write_com(0x83);
- write_data(shuzu[11]);
- }
- }
- void display(unsigned int date) //顯示溫度,
- {
- if(date/100==0) //100度內(nèi)
- {
- write_com(0x84);
- write_data(shuzu[date/10]);//十位
- write_com(0x85);
- write_data(shuzu[date%10]);//個(gè)位
- write_com(0x86);
- write_data(shuzu[13]);//小數(shù)點(diǎn)
- write_com(0x87);
- write_data(shuzu[xiaoshu1]);//小數(shù)點(diǎn)后一位
- write_com(0x88);
- write_data(shuzu[xiaoshu2]); //小數(shù)點(diǎn)后二位
- }
- else if(date/100==1) //100度上
- {
- write_com(0x83);
- write_data(shuzu[date/100]);//百位
- write_com(0x84);
- write_data(shuzu[(date-100)/10]);//十位
- write_com(0x85);
- write_data(shuzu[date%10]);//個(gè)位
- write_com(0x86);
- write_data(shuzu[13]);//點(diǎn)
- write_com(0x87);
- write_data(shuzu[xiaoshu1]);//小數(shù)點(diǎn)后一位
- write_com(0x88);
- write_data(shuzu[xiaoshu2]);//小數(shù)點(diǎn)后二位
- }
- }
- void key() //按鍵加減標(biāo)尺
- {
- //尺度
- if(keym==0)//判定
- {
- delay_50us(100);//延時(shí)
- if(keym==0)
- {
- y++;//轉(zhuǎn)換加減的數(shù)值
- if(y>=3)y=0;
- switch (y)
- {
- case 0:m=1;break;
- case 1:m=5 ;break;
- case 2:m=10 ;break;
- }
- while(keym==0);//自鎖
- }
- }
- ///換
- if(keyh==0)//上下限轉(zhuǎn)換按鍵
- {
- delay_50us(100);
- if(keyh==0)
- {
- o++;
- if(o>=3)o=0;//1為上限選中,2為下限選中,0為隱藏
- while(keyh==0);
- }
- }
- /////上限
- if(keyu==0&o==1)//上限加按鍵
- {
- delay_50us(100);
- if(keyu==0&o==1)
- {
- u=u+m; while(keyu==0);
- }
- }
- if(keyl==0&o==1) //上限減按鍵
- {
- delay_50us(100);
- if(keyl==0&o==1)
- {
- u=u-m; while(keyl==0);
- }
- }
- //// 下限
- if(keyu==0&o==2)//下限加按鍵
- {
- delay_50us(100);
- if(keyu==0&o==2)
- {
- l=l+m;while(keyu==0);
- }
- }
- if(keyl==0&o==2)//下限減按鍵
- {
- delay_50us(100);
- if(keyl==0&o==2)
- {
- l=l-m;while(keyl==0);
- }
- }
- }
- void BJ()//溫度報(bào)警子程序
- {
- if(f==1) //溫度大于0的溫度比較
- {
-
- if(sdata>=u) //溫度大于上限,報(bào)警
- {
- display(sdata); button();
- }
- else if(l>0&sdata<=l) //溫度小于下限,報(bào)警
- {
- display(sdata); button();
- }
- else display(sdata);
- }
- else if(f==0) //溫度小于0的溫度比較
- {
- if(l>=0)
- {
- display(sdata); button();
- }
- else if(l<0)
- {
- if(sdata>=-l) //溫度于下限,報(bào)警
- {
- display(sdata); button();
- }
- else if(sdata<-l) //溫度大于下限不報(bào)警
- {
- display(sdata);
- }
- }
- else display(sdata);
- }
- }
- void main()
- {
- buzz=1;
- display0(); //歡迎,
- display1();//框架
- while(1)
- {
- display2(); //上下限,尺度
- ReadTemperature(); //測溫程序
- fuhao();//負(fù)號顯示程序
- key(); //按鍵
- BJ(); //報(bào)警程序
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
18B20溫度計(jì)1602.rar
(2.86 MB, 下載次數(shù): 1254)
2018-11-17 15:28 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|