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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4604|回復: 31
收起左側

溫度計之小問題,求助高人

  [復制鏈接]
ID:197962 發表于 2017-5-23 00:14 | 顯示全部樓層 |閱讀模式
IMG_20170523_000319.jpg 54115142040270.jpg 問題是數碼管前二位不是太亮,我用了10K排阻,不亮與排阻有關嗎?
                                                                多謝
回復

使用道具 舉報

ID:197962 發表于 2017-5-23 00:52 來自手機 | 顯示全部樓層
發的圖怎么不全發
IMG_20170522_232633.jpg
IMG_20170522_232621.jpg
IMG_20170522_232510.jpg
IMG_20170522_232457.jpg
IMG_20170522_232434.jpg
回復

使用道具 舉報

ID:96682 發表于 2017-5-23 13:50 | 顯示全部樓層
在實物上對比一下,就知道接與不接有沒有關系了
回復

使用道具 舉報

ID:7485 發表于 2017-5-23 14:08 | 顯示全部樓層
如果是全部不是太亮,可能是排阻的問題。
你的問題則不然,最后一位太亮,是因為你的顯示程序停在了最后一位上,沒有關閉。直到下次顯示第一位時才關閉,比其他兩位亮的時間長所致。
回復

使用道具 舉報

ID:203876 發表于 2017-5-23 14:15 | 顯示全部樓層
這背部的線路我也是醉了
回復

使用道具 舉報

ID:203875 發表于 2017-5-23 14:22 | 顯示全部樓層
應該不是排阻問題
回復

使用道具 舉報

ID:170270 發表于 2017-5-23 14:46 | 顯示全部樓層
顯示時間問題 數碼管2MS刷新一次 差距就不明顯了 定時中斷2MS 顯示程序放中斷里 就能解決
回復

使用道具 舉報

ID:7485 發表于 2017-5-23 17:31 | 顯示全部樓層
把程序貼出來。開始顯示的時候,你有“位”選擇,同時就關閉了前面的一位的顯示,而最后一位顯示完后沒有再選擇其他的位,所以他就一直開著,直到下次再調用顯示程序時才改變“位”,所以最后一位很亮。這是許多新手容易忽視的問題。

最后一位顯示完后,將“位選”關閉即可。
回復

使用道具 舉報

ID:198608 發表于 2017-5-23 20:37 來自手機 | 顯示全部樓層
加驅動
回復

使用道具 舉報

ID:7485 發表于 2017-5-24 11:10 | 顯示全部樓層

什么意思?
回復

使用道具 舉報

ID:197962 發表于 2017-5-27 23:30 | 顯示全部樓層

#include<reg52.h>
#include <intrins.h>
#define  uchar  unsigned  char
#define  uint   unsigned  int
sbit  DATA = P3^7; //DS18B20接入口
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char  bai,shi,ge; //定義變量
/*延時子函數*/
void delay(uint num)
{
while(num--) ;
}
/*************DS18b20溫度傳感器函數*********************/
Init_DS18B20(void)     //傳感器初始化
{
  uchar x=0;
  DATA = 1;    //DQ復位
  delay(10);  //稍做延時
  DATA = 0;    //單片機將DQ拉低
  delay(80); //精確延時 大于 480us    //450
  DATA = 1;    //拉高總線
  delay(20);
  x=DATA;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  delay(30);
}
//讀一個字節
ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
  {
    DATA = 0; // 給脈沖信號
    dat>>=1;
    DATA = 1; // 給脈沖信號
    if(DATA)
     dat|=0x80;
    delay(8);
  }
  return(dat);
}
//寫一個字節
WriteOneChar(unsigned char dat)
{
  uchar i=0;
  for (i=8; i>0; i--)
  {
    DATA = 0;
    DATA = dat&0x01;
   delay(10);
   DATA = 1;
   dat>>=1;
  }
delay(8);
}
//讀取溫度
int ReadTemperature(void)
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
/*顯示子函數*/
void  display(int bai,int shi,int ge)
{
P3=0XFB; //顯示小數點
P1=0X80; //顯示小數點
delay(50);//顯示小數點
P3=0xf7;
P1=table[bai];//顯示千位
delay(50);//一小段延時動態顯示
P3=0xfb;
P1=table[shi];//顯示百位
delay(50);
P3=0xfd;
P1=table[ge];//顯示十位
delay(50);
}
void  main()
{
int  temp;
while(1)
{  
  temp=ReadTemperature();//讀溫度
  bai=temp%1000/100;//顯示百位
  shi=temp%100/10;//顯示十位
  ge=temp%10;//顯示個位
  
  display(bai,shi,ge);//顯示函數
}  
}
//////////////////////////////
我又試了,不是排阻問題,程序如何修改?
多謝
回復

使用道具 舉報

ID:197962 發表于 2017-5-27 23:33 | 顯示全部樓層

#include<reg52.h>
#include <intrins.h>
#define  uchar  unsigned  char
#define  uint   unsigned  int
sbit  DATA = P3^7; //DS18B20接入口
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char  bai,shi,ge; //定義變量
/*延時子函數*/
void delay(uint num)
{
while(num--) ;
}
/*************DS18b20溫度傳感器函數*********************/
Init_DS18B20(void)     //傳感器初始化
{
  uchar x=0;
  DATA = 1;    //DQ復位
  delay(10);  //稍做延時
  DATA = 0;    //單片機將DQ拉低
  delay(80); //精確延時 大于 480us    //450
  DATA = 1;    //拉高總線
  delay(20);
  x=DATA;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  delay(30);
}
//讀一個字節
ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
  {
    DATA = 0; // 給脈沖信號
    dat>>=1;
    DATA = 1; // 給脈沖信號
    if(DATA)
     dat|=0x80;
    delay(8);
  }
  return(dat);
}
//寫一個字節
WriteOneChar(unsigned char dat)
{
  uchar i=0;
  for (i=8; i>0; i--)
  {
    DATA = 0;
    DATA = dat&0x01;
   delay(10);
   DATA = 1;
   dat>>=1;
  }
delay(8);
}
//讀取溫度
int ReadTemperature(void)
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
/*顯示子函數*/
void  display(int bai,int shi,int ge)
{
P3=0XFB; //顯示小數點
P1=0X80; //顯示小數點
delay(50);//顯示小數點
P3=0xf7;
P1=table[bai];//顯示千位
delay(50);//一小段延時動態顯示
P3=0xfb;
P1=table[shi];//顯示百位
delay(50);
P3=0xfd;
P1=table[ge];//顯示十位
delay(50);
}
void  main()
{
int  temp;
while(1)
{  
  temp=ReadTemperature();//讀溫度
  bai=temp%1000/100;//顯示百位
  shi=temp%100/10;//顯示十位
  ge=temp%10;//顯示個位
  
  display(bai,shi,ge);//顯示函數
}  
}
/////////////////////////////
不是排阻問題,程序如何修改?
多謝
回復

使用道具 舉報

ID:205555 發表于 2017-5-28 09:22 | 顯示全部樓層
不是阻排問題
回復

使用道具 舉報

ID:47933 發表于 2017-5-28 09:45 | 顯示全部樓層
排阻沒有問題,問題是排阻的值太大,可并聯一個3k-10k的排阻,即可排除故障并大幅提高亮度。
這是我最近做試驗剛得出的經驗:
http://www.zg4o1577.cn/bbs/dpj-84657-1.html
回復

使用道具 舉報

ID:205617 發表于 2017-5-28 14:33 | 顯示全部樓層
直接加個數字邏輯芯片就好了
回復

使用道具 舉報

ID:162136 發表于 2017-5-28 16:17 | 顯示全部樓層
動態掃描時,每一位數碼管點亮的時間差別太多,所以亮度差別很多,在亮度不夠的數碼管點亮程序后加上幾毫秒的延時就可以了。
回復

使用道具 舉報

ID:185367 發表于 2017-5-28 17:28 | 顯示全部樓層
P3掃描顯示完畢之后清屏試試
回復

使用道具 舉報

ID:155507 發表于 2017-5-28 18:31 | 顯示全部樓層
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define  uchar  unsigned  char
  4. #define  uint   unsigned  int

  5. sbit  DATA = P3^7; //DS18B20接入口
  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  7. char  bai,shi,ge; //定義變量
  8. /*延時子函數*/
  9. void delay(uint num)
  10. {
  11.         while(num--) ;
  12. }
  13. /*************DS18b20溫度傳感器函數*********************/
  14. Init_DS18B20(void)     //傳感器初始化
  15. {
  16.         uchar x=0;
  17.         DATA = 1;    //DQ復位
  18.         delay(10);  //稍做延時
  19.         DATA = 0;    //單片機將DQ拉低
  20.         delay(80); //精確延時 大于 480us    //450
  21.         DATA = 1;    //拉高總線
  22.         delay(20);
  23.         x=DATA;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  24.         delay(30);
  25. }
  26. //讀一個字節
  27. ReadOneChar(void)
  28. {
  29.         uchar i=0;
  30.         uchar dat = 0;
  31.         for (i=8;i>0;i--)
  32.         {
  33.                 DATA = 0; // 給脈沖信號
  34.                 dat>>=1;
  35.                 DATA = 1; // 給脈沖信號
  36.                 if(DATA)
  37.                 dat|=0x80;
  38.                 delay(8);
  39.         }
  40.         return(dat);
  41. }
  42. //寫一個字節
  43. WriteOneChar(unsigned char dat)
  44. {
  45.         uchar i=0;
  46.         for (i=8; i>0; i--)
  47.         {
  48.                 DATA = 0;
  49.                 DATA = dat&0x01;
  50.                 delay(10);
  51.                 DATA = 1;
  52.                 dat>>=1;
  53.         }
  54.         delay(8);
  55. }
  56. //讀取溫度
  57. int ReadTemperature(void)
  58. {
  59.         uchar a=0;
  60.         uchar b=0;
  61.         int t=0;
  62.         float tt=0;
  63.         Init_DS18B20();
  64.         WriteOneChar(0xCC); // 跳過讀序號列號的操作
  65.         WriteOneChar(0x44); // 啟動溫度轉換
  66.         Init_DS18B20();
  67.         WriteOneChar(0xCC); //跳過讀序號列號的操作
  68.         WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  69.         a=ReadOneChar();//低位
  70.         b=ReadOneChar();//高位
  71.         t=b;
  72.         t<<=8;
  73.         t=t|a;
  74.         tt=t*0.0625;
  75.         t= tt*10+0.5;
  76.         return(t);
  77. }
  78. /*顯示子函數*/
  79. void  display(int bai,int shi,int ge)
  80. {
  81.         P3=0XFB; //顯示小數點
  82.         P1=0X80; //顯示小數點
  83.         delay(50);//顯示小數點
  84.         P3=0xf7;
  85.         P1=table[bai];//顯示千位
  86.         delay(50);//一小段延時動態顯示
  87.         P1=0x00;//消隱
  88.         P3=0xfb;
  89.         P1=table[shi];//顯示百位
  90.         delay(50);
  91.         P1=0x00;//消隱
  92.         P3=0xfd;
  93.         P1=table[ge];//顯示十位
  94.         delay(50);
  95.         P1=0x00;//消隱
  96. }
  97. void  main()
  98. {
  99.         int  temp;
  100.         while(1)
  101.         {  
  102.                 temp=ReadTemperature();//讀溫度
  103.                 bai=temp%1000/100;//顯示百位
  104.                 shi=temp%100/10;//顯示十位
  105.                 ge=temp%10;//顯示個位

  106.                 display(bai,shi,ge);//顯示函數
  107.         }  
  108. }
  109. /////////////////////////////

復制代碼
回復

使用道具 舉報

ID:205678 發表于 2017-5-28 18:41 | 顯示全部樓層
我不知道啊
回復

使用道具 舉報

ID:205694 發表于 2017-5-28 20:02 | 顯示全部樓層
有關的換成1k的試試
回復

使用道具 舉報

ID:205714 發表于 2017-5-28 21:18 | 顯示全部樓層
10K電阻太大了啊
回復

使用道具 舉報

ID:205740 發表于 2017-5-28 23:37 | 顯示全部樓層
換成2k試下
回復

使用道具 舉報

ID:205792 發表于 2017-5-29 11:21 | 顯示全部樓層
跟排阻有關
回復

使用道具 舉報

ID:197962 發表于 2017-5-30 08:20 來自手機 | 顯示全部樓層
多謝前輩關注,
問題完美解決。
硬件勿需變動,
軟件仍要巧思。
伴汝攜手同修,
渡我本初般若!
IMG_20170530_075854.jpg
IMG_20170530_072214.jpg
回復

使用道具 舉報

ID:206250 發表于 2017-5-31 09:31 | 顯示全部樓層
不是排阻問題
回復

使用道具 舉報

ID:206263 發表于 2017-5-31 10:04 | 顯示全部樓層
不是排阻問題。。
回復

使用道具 舉報

ID:206309 發表于 2017-5-31 11:50 | 顯示全部樓層
屏新時間不一樣,前兩個顯示的時間短。
回復

使用道具 舉報

ID:197962 發表于 2017-6-4 06:14 | 顯示全部樓層
  103222 發表于 2017-5-23 00:52
發的圖怎么不全發

換一高人程序便可,
自個腦力仍需精進。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天久久| 韩国欧洲一级毛片 | 中文字幕亚洲精品 | 日韩av一区在线观看 | 日韩精品久久久久 | 国产精品视频在 | 精品一区二区免费视频 | 天堂在线网 | 国产成人精品久久久 | 日韩欧美视频免费在线观看 | 久久中文字幕电影 | 一级毛片免费看 | 午夜午夜精品一区二区三区文 | 懂色av蜜桃av | 国产电影一区二区 | 美女黄网站| 欧洲成人 | 嫩草影院黄 | 亚洲精品电影在线观看 | 我爱操 | 日韩av免费在线观看 | 日韩毛片在线观看 | 91精品在线播放 | 久久99久久98精品免观看软件 | 一区二区三区视频在线免费观看 | 欧美日韩在线一区二区三区 | 99中文字幕 | 亚洲天堂av网 | 国产95在线 | 亚洲男人的天堂网站 | 久久久久一区 | 九九热精品视频在线观看 | 午夜丰满少妇一级毛片 | 一级毛片大全免费播放 | 日韩国产精品一区二区三区 | 午夜寂寞福利视频 | 男人天堂视频在线观看 | 亚洲精品乱码久久久久久9色 | a级在线免费 | 国产精品国产精品 | 国产精品a久久久久 |