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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3285|回復(fù): 17
收起左側(cè)

用腐蝕板做成了單片機(jī)溫度計實(shí)物圖,但是有問題

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

原理圖

原理圖
回復(fù)

使用道具 舉報

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

使用道具 舉報

ID:787372 發(fā)表于 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;          //數(shù)碼管4 sbit w1=P2^1;          //數(shù)碼管3 sbit w2=P2^2;          //數(shù)碼管2 sbit w3=P2^3;          //數(shù)碼管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};          //小數(shù)斷碼表 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};        //個位帶小數(shù)點(diǎn)的斷碼表 uchar data temp_data[2]={0x00,0x00};//讀出溫度暫放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數(shù)據(jù),共四個數(shù)據(jù)和一個運(yùn)算暫用 /***************11us延時函數(shù)***************/ 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;                                                //小數(shù)點(diǎn)                         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; } /****************寫命令函數(shù)*****************/ 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); }         /****************讀一個字節(jié)函數(shù)*******************/ 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;  } /***************讀取溫度函數(shù)***************/ 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; } /***************溫度數(shù)據(jù)處理函數(shù)***************/ 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;         }} /***************溫度顯示轉(zhuǎn)換**************/ 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;         }                                                                                 } /**************按鍵設(shè)置*************/ void keyscan() {         int temp1;    //最高溫度和最低溫度標(biāo)志位         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;                         }                 }         } } /**************主函數(shù)*************/ 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();                      } }
回復(fù)

使用道具 舉報

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

是共陰的,選對了的
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:298850 發(fā)表于 2020-12-19 16:27 | 顯示全部樓層
原理圖問題有點(diǎn)多:
回復(fù)

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

ID:298850 發(fā)表于 2020-12-19 16:36 | 顯示全部樓層
補(bǔ)充:數(shù)碼管驅(qū)動需加入限流電阻
回復(fù)

使用道具 舉報

ID:414556 發(fā)表于 2020-12-19 17:15 | 顯示全部樓層
你的上拉排阻4.7K有點(diǎn)大,換470Ω應(yīng)該就亮了.
回復(fù)

使用道具 舉報

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


回復(fù)

使用道具 舉報

ID:787372 發(fā)表于 2020-12-19 20:20 | 顯示全部樓層

感謝,
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 五月伊人网 | 久久久精品国产sm调教网站 | 国产一级特黄 | 男女啪啪网站 | 日韩福利 | 日韩亚洲欧美在线观看 | 久久久精品在线观看 | 欧美资源在线 | 97超碰在线播放 | 国产精品久久久久久妇女6080 | 99久久久国产精品 | 国产精品一级二级 | 欧美精品乱码99久久蜜桃 | 久久999 | 一级黄色片网站 | 日韩亚洲一区二区 | 欧美一二区 | 亚洲视频在线观看一区 | 九九久久精品视频 | 国产第二页 | 国产美女免费 | avtt久久| 成年人黄色 | 性网址| 午夜影视 | 国产成人在线免费观看 | 亚洲在线免费观看 | www.夜夜骑 | 吃奶动态图 | 一级特黄aaaaaa大片 | 成av人片一区二区三区久久 | 日韩黄色一级 | 国产尤物视频 | 国产一级片免费 | 成人a级片| 国产一区二区视频在线播放 | 亚洲一级二级三级 | 国产成人在线播放 | 视频在线一区二区 | 国产探花视频在线观看 | 久久精品综合 |