久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3062|回復: 17
收起左側

用腐蝕板做成了單片機溫度計實物圖,但是有問題

[復制鏈接]
ID:787372 發表于 2020-12-19 13:58 | 顯示全部樓層 |閱讀模式
有大佬可以幫我看看怎么回事嗎
最近從網上學習用DS18B20和STC52單片機做了個溫度計,仿真成功后用腐蝕板做成了實物圖,但最后接電源只有蜂鳴器在響,數碼管不亮,后面實在找不出問題特地來向大佬們求助,原理圖如下

原理圖

原理圖
回復

使用道具 舉報

ID:824490 發表于 2020-12-19 15:50 | 顯示全部樓層
數碼管有共陰、共陽之分,你選對了嗎?
回復

使用道具 舉報

ID:787372 發表于 2020-12-19 15:54 | 顯示全部樓層
#include<reg51.h> #include<intrins.h>    #define dm P0          //段碼輸出口 #define uchar unsigned char  #define uint unsigned int sbit DQ=P2^7;          //溫度輸入口 sbit w0=P2^0;          //數碼管4 sbit w1=P2^1;          //數碼管3 sbit w2=P2^2;          //數碼管2 sbit w3=P2^3;          //數碼管1 sbit beep=P3^7;   //蜂鳴器 sbit yellow=P1^0;          //指示燈 sbit   led=P1^1;  //  高溫指示燈 sbit set=P3^0;           //低溫指示燈 sbit add=P3^1; sbit dec=P3^2; int temp1=0;           uint h; uint temp; uchar r; uchar high=100,low=25; uchar sign; uchar q=0; uchar tt=0; uchar scale; uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,                         0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};          //小數斷碼表 uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,                             0x7d,0x07,0x7f,0x6f,0x00,0x40};          //共陰LED段碼表"0""1""2""3""4""5""6""7""8""9""不亮""-" uchar code table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};        //個位帶小數點的斷碼表 uchar data temp_data[2]={0x00,0x00};//讀出溫度暫放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數據,共四個數據和一個運算暫用 /***************11us延時函數***************/ void delay(uint t) {         for(;t>0;t--); } void scan() {         int j;         for(j=0;j<4;j++)         {                 switch(j)                 {                         case 0:                         dm=table_dm[display[0]];;                         w0=0;                         delay(300);                         w0=1;                                                //小數點                         case 1:                         dm=table_dm1[display[1]];                         w1=0;                         delay(300);                         w1=1;                                                //個位                         case 2:                         dm=table_dm[display[2]];                         w2=0;                         delay(300);                         w2=1;                                            //十位                         case 3:                         dm=table_dm[display[3]];                         w3=0;                         delay(300);                         w3=1;                                                //百位                 }         } } /**************DS18B20初始化**************/ ow_reset(void) {         char presence=1;         while(presence)         {                 while(presence)                 {                         DQ=1;_nop_();_nop_();                         DQ=0;                         delay(50);                         DQ=1;                         delay(6);                         presence=DQ;                 }                 delay(45);                 presence=~DQ;         }         DQ=1;                 return presence; } /****************寫命令函數*****************/ void write_byte(uchar val) {         uchar i;         for(i=8;i>0;i--)         {                 DQ=1;_nop_();_nop_();                 DQ=0;_nop_();_nop_();_nop_();_nop_();                 DQ=val&0x01;                 delay(6);                 val=val>>1;                         }         DQ=1;         delay(1); }         /****************讀一個字節函數*******************/ uchar read_byte(void) {         uchar i;         uchar value=0;         for(i=8;i>0;i--)         {                 DQ=1;_nop_();_nop_();                 value>>=1;                 DQ=0;_nop_();_nop_();_nop_();_nop_();                 DQ=1;_nop_();_nop_();_nop_();_nop_();                 if(DQ)value|=0x80;                 delay(6);         }         DQ=1;                 return value;  } /***************讀取溫度函數***************/ read_temp() {         ow_reset();         delay(200);         write_byte(0xcc);         write_byte(0x44);         ow_reset();         delay(1);         write_byte(0xcc);         write_byte(0xbe);         temp_data[0]=read_byte();         temp_data[1]=read_byte();         temp=temp_data[1];         temp<<=8;         temp=temp|temp_data[0];         return temp; } /***************溫度數據處理函數***************/ work_temp(uint tem) {         uchar n=0;         if(tem>6348)         {                 tem=65536-tem;                 n=1;         }         display[4]=tem&0x0f;         display[0]=ditab[display[4]];         display[4]=tem>>4;         display[3]=display[4]/100;         display[1]=display[4]%100;         display[2]=display[1]/10;         display[1]=display[1]%10;         r=display[1]+display[2]*10+display[3]*100;         if(!display[3])         {                 display[3]=0x0a;                 if(!display[2])                         {                         display[2]=0x0a;                 }         }         if(n)         {                 display[3]=0x0b;         }         return n; } /***************報警提示電路***************/ void BEEP() {          if(r>=high&&r<129)         {                 led=0;         }         else         {                 led=1;         }         if(r<low)         {                 yellow=~yellow;         }         else         {                 yellow=1;         }         if((r>=high&&r<129)||(r<low))         {                 beep=!beep;         }                 else         {                 beep=1;         }} /***************溫度顯示轉換**************/ void xianshi(int horl) {         int n=0;         if(horl>128)         {                 horl=256-horl;                 n=1;         }         display[3]=horl/100;         display[3]=display[3]&0x0f;         display[2]=horl%100/10;         display[1]=horl%10;         display[0]=0;         if(!display[3])         {                 display[3]=0x0a;                 if(!display[2])                         {                         display[2]=0x0a;                 }         }         if(n)         {                 display[3]=0x0b;         }                                                                                 } /**************按鍵設置*************/ void keyscan() {         int temp1;    //最高溫度和最低溫度標志位         if(set==0)         {                 while(1)                 {                         delay(500);//消抖                         if(set==0)                         {                                 temp1++;                                 while(!set)                                 scan();                         }                         if(temp1==1)                         {                                 xianshi(high);                                 scan();                                 if(add==0)                                 {                                         while(!add)                                         scan();                                         high+=1;                                 }                                 if(dec==0)                                 {                                         while(!dec)                                         scan();                                         high-=1;                                 }                         }                         if(temp1==2)                         {                                 xianshi(low);                                 if(add==0)                                 {                                         while(!add)                                         scan();                                         low+=1;                                 }                                 if(dec==0)                                 {                                         while(!dec)                                         scan();                                         low-=1;                                 }                                 scan();                         }                         if(temp1>=3)                         {                                 temp1=0;                                 break;                         }                 }         } } /**************主函數*************/ void main() {         dm=0x00;         w0=0;         w1=0;         w2=0;         w3=0;         for(h=0;h<4;h++)         {                 display[h]=0;         }         ow_reset();         write_byte(0xcc);         write_byte(0x44);         for(h=0;h<100;h++)         {                 scan();         }         while(1)         {                 if(temp1==0)                 {                         work_temp(read_temp());                 scan();                 BEEP();                 keyscan();                 }                 else        keyscan();                      } }
回復

使用道具 舉報

ID:787372 發表于 2020-12-19 15:55 | 顯示全部樓層
名字不是重點 發表于 2020-12-19 15:50
數碼管有共陰、共陽之分,你選對了嗎?

是共陰的,選對了的
回復

使用道具 舉報

ID:824490 發表于 2020-12-19 15:56 | 顯示全部樓層
1、你的軟件是否有問題?
2、數碼管是否選對?
3、PCB走線是否無錯?
另外你家這個原理圖有問題,沒看到一個濾波電容(MCU、18B20都沒有)。數碼管沒有限流電阻,驅動不擴流,會造成亮度不均。
仿真只從邏輯上從計算分析,并不會從電氣上給你報錯。。
回復

使用道具 舉報

ID:824490 發表于 2020-12-19 16:01 | 顯示全部樓層
蜂鳴器接法也不對勁。NPN管B極要串一個電阻(1K-4K7),NPN管的C極接10K電阻不對。把電阻去了,蜂鳴器改接電阻位置,E極直接接地
回復

使用道具 舉報

ID:787372 發表于 2020-12-19 16:09 | 顯示全部樓層
名字不是重點 發表于 2020-12-19 15:56
1、你的軟件是否有問題?
2、數碼管是否選對?
3、PCB走線是否無錯?

數碼管和51單片機之間接了個排阻4.7k的,濾波電路不懂咋弄,求教
回復

使用道具 舉報

ID:18297 發表于 2020-12-19 16:09 | 顯示全部樓層
硬件電路有問題的,軟件也不知道是否正常。
前期可以先仿真一下軟件功能,再搞個開發板,驗證一下真實效果,最后再自己做板子。
回復

使用道具 舉報

ID:554500 發表于 2020-12-19 16:14 | 顯示全部樓層
數碼管其實就是發光二極管
如果是共陰,P2置0,P0置1
如果是共陽,P2置1,P0置0
然后看下哪些段亮,哪些不亮
然后再找問題
回復

使用道具 舉報

ID:298850 發表于 2020-12-19 16:27 | 顯示全部樓層
原理圖問題有點多:
回復

使用道具 舉報

ID:787372 發表于 2020-12-19 16:30 | 顯示全部樓層
名字不是重點 發表于 2020-12-19 16:01
蜂鳴器接法也不對勁。NPN管B極要串一個電阻(1K-4K7),NPN管的C極接10K電阻不對。把電阻去了,蜂鳴器改接 ...

按照前輩的方法改了之后仿真達不到預期,蜂鳴器不響,其他電路正常(不懂怎么發圖片)
回復

使用道具 舉報

ID:298850 發表于 2020-12-19 16:35 | 顯示全部樓層
1、D1、D2限流電阻太小,用510歐
2、蜂鳴器怎么接成射極跟隨的,改為正常的開關電路
3、數碼管電路應該可以正常,但直驅方式太剛,加個594吧
18b20看手冊
其他就看你的編程水平了,能做成偽并行的狀態。
回復

使用道具 舉報

ID:298850 發表于 2020-12-19 16:36 | 顯示全部樓層
補充:數碼管驅動需加入限流電阻
回復

使用道具 舉報

ID:414556 發表于 2020-12-19 17:15 | 顯示全部樓層
你的上拉排阻4.7K有點大,換470Ω應該就亮了.
回復

使用道具 舉報

ID:824490 發表于 2020-12-19 17:19 | 顯示全部樓層
Schematic Prints.pdf (38.22 KB, 下載次數: 10) 匆忙中畫個圖給你參考一下


回復

使用道具 舉報

ID:787372 發表于 2020-12-19 20:20 | 顯示全部樓層
名字不是重點 發表于 2020-12-19 17:19
匆忙中畫個圖給你參考一下

感謝,
回復

使用道具 舉報

ID:420836 發表于 2020-12-20 00:48 | 顯示全部樓層
查看電路板,檢查是否有缺陷,例如短路,斷線等。如果電路板是好,則檢查程序是否錯誤。
回復

使用道具 舉報

ID:401564 發表于 2020-12-20 19:46 | 顯示全部樓層
只要是用STC單片機有跟軟件延時相關的東西,仿真正常了,實物一定是不行的
仿真是以傳統的AT8051指令進行的,而STC單片機的指令時鐘是要比AT8051快的
還有,已經快要到2021年了,不要再像以前那樣用三氯化鐵了,自己畫好PCB板,發去打樣,有一天左右到手
你最終還是要學會畫板的,這畫板跟泡板可不一樣
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国美女一级黄色片 | 爱爱无遮挡| 一区二区三区四区在线视频 | 91精品国产乱码久久蜜臀 | 日本久久www成人免 成人久久久久 | 日韩中文字幕在线播放 | 有码一区| 欧美视频一区二区三区 | 欧美自拍另类 | 午夜专区 | 99re在线视频免费观看 | 亚洲午夜av久久乱码 | 国产一区二区三区在线 | 精品久久久久久久久久久 | 2021狠狠干| 欧美日韩国产精品一区 | 国产一区日韩在线 | 精品久久久久久久久久 | 国产婷婷| 欧美日韩最新 | 日本a视频 | 欧美视频1区| 日韩视频一级 | av第一页 | 成人免费在线观看 | www.亚洲免费 | 免费av直接看 | 91久久精品国产91久久性色tv | 久久久久国产精品免费免费搜索 | 久久99精品视频 | 国产91丝袜 | 国产精品99久久久久久久久久久久 | 成人在线视频网 | 日韩免费高清视频 | 99精品国产一区二区三区 | 久久久久久成人 | 青青草视频网站 | 国产福利资源 | 极品销魂美女一区二区 | 精品一二区 | 日日夜夜狠狠操 |