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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3119|回復: 2
收起左側

溫度報警器 出現了數碼管顯示不完全的問題

[復制鏈接]
ID:369813 發表于 2018-7-11 23:35 | 顯示全部樓層 |閱讀模式
之前參考別人的帖子做了這個溫度報警器,報警功能可以實現,但是出現了數碼管顯示不完全的問題,本人萌新一枚,希望有大神可以指點一二,謝謝啦!!! 圖片1.png


源碼如下:
#include<reg51.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint  unsigned int
sbit DQ=P3^6;
sbit sounder=P3^7;
sbit D1=P1^4;        
sbit D2=P1^5;      
uchar temperature1,temperature0,TH,TL;
float tt;                     
int t;                              
uint count0,count1;
int baojing[]={700,-200};   
uchar code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};      
uchar code smg1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xF7,0xFC,0xB9,0xDE,0xF9,0xF1};
void delayms(int j)
{
                         int aa,kk;
                         for(aa=0;aa<j;aa++)
                            for(kk=120;kk>0;kk--);
}
void delay5us()     
{
                         _nop_();
}
void delay10us()
{                        
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
}
void delay102us()     
{
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
                         delay10us();
}
void delay614us()                 
{
                         delay102us();
                         delay102us();
                         delay102us();
                         delay102us();
                         delay102us();
                         delay102us();
}

uchar init_DS18B20()
{
                         uchar status ;
                         DQ=1;
                         delay10us();      
                         DQ=0;
                         delay614us();
                         DQ=1;              
                         delay10us();
                         delay10us();
                         delay10us();
                         status=DQ;  
                         delay102us();
                         delay102us();
                         delay102us();
                         delay102us();
                         DQ=1;               
                         return status;
}  

uchar DS18B20_readbyte()
{                        
                         uchar i,dat=0;
                         DQ=1;
    _nop_();      
                         for(i=0;i<8;i++)
                         {
                            DQ=0;            
                            _nop_();
                            _nop_();
                            _nop_();
                            dat>>=1;
                            DQ=1;      
                            _nop_();
                            _nop_();
                            if(DQ)dat|=0x80;
                            else
                            dat=dat|0x00;

                            delay102us();
                            delay102us();
                            delay102us();
                            delay102us();  
                            DQ=1;      
                         }
                         return dat;
}

void DS18B20_writebyte(uchar dat)
{
                         uchar i;
                         for(i=0;i<8;i++)
                         {

                            DQ=0;
                            DQ=dat&0x01;   
                            delay10us();
                            delay5us();
                            dat>>=1;         
                            delay10us();
                            delay10us();
                            delay10us();
                            delay10us();
                            delay5us();
                            DQ=1;
                         }
                         DQ=1;                     
}

void  read_temperature()
{
                         if(init_DS18B20()==0)
                         {
                            DS18B20_writebyte(0xcc);   
                            DS18B20_writebyte(0x44);   
                          }
                         if(init_DS18B20()==0)                  
                          {                                 
                            DS18B20_writebyte(0xcc);                    
                            DS18B20_writebyte(0xbe);   
                            temperature0=DS18B20_readbyte();
                            temperature1=DS18B20_readbyte();
                         }

}

void xianshi()
{                        
                         uchar  bai,shi,ge,i;
                         uint wendu;
                         read_temperature();
                         t=temperature1;
                         t<<=8;        
                         t=t|temperature0;
                         tt=t*0.0625;
                         t=tt*10+(t>0?0.5:-0.5);
                         TH=t>=baojing[0]?1:0;      
                         TL=t<=baojing[1]?1:0;
                         wendu=abs(t);
                         bai=wendu/100;
                         shi=wendu/10%10;
                         ge=wendu%10;
                         for(i=0;i<30;i++)            
                         {
                            if(t<0)
                            {
                                   P2=0xfb;
                                   P0=0x40;
                                   delayms(2);
                            }
                            P2=0xff;
                            P2=0xf7;
                            P0=smg[bai];
                            delayms(2);
                            P2=0xef;
                            P0=smg1[shi];
                            delayms(2);
                            P2=0xdf;
                            P0=smg[ge];
                            delayms(2);
                            P2=0xbf;
                            P0=0x63;
                            delayms(2);
                            P2=0x7f;
                            P0=0x39;
                            delayms(2);
                         }
}                           
void main()
{
                         D1=1;
                         D2=1;
                         sounder=0;   
                         P2=0x00;
                         P0=0x00;
                         TMOD=0x11;
                         TH0=-(1000/256);
                         TL0=-(1000%256);
                         TH1=-(1000/256);
                         TL1=-(1000%256);
                         ET0=1;
                         ET1=1;
                         EA=1;
                         TR1=0;
                         TR0=0;
                         read_temperature();
                         while(1)
                         {
                            read_temperature();
                            xianshi();
                            if(TH==1)
                                                                                                                        TR0=1;   
                            else   
                                                                                                                        TR0=0;
                            if(TL==1)
                                                                                                                        TR1=1;
                            else      
                                                                                                                        TR1=0;

                         }
}
void ET0_time1() interrupt 1
{
                         TH0 =-(1000 / 256);
                         TL0 =-(1000 % 256);
                         sounder=~sounder;
                         if(++count0== 400)
                         {
                            count0= 0;
                            if(TH)     D1= ~D1;       else  D1 = 1;
                         }
}                          
void ET1_time1()interrupt 3
{
                         TH1 =-(1000 / 256);
                         TL1 =-(1000 % 256);
                         sounder=~sounder;
                         if(++count1== 400)
                         {
                            count1= 0;
                            if(TL)     D2 = ~D2;      else  D2 = 1;
                         }
}

回復

使用道具 舉報

ID:369845 發表于 2018-7-12 00:19 | 顯示全部樓層
共陰或者共陽的數碼管選錯了吧
回復

使用道具 舉報

ID:269211 發表于 2018-7-12 17:01 | 顯示全部樓層
你的程序是共陰的,你仿真是不是用了共陽的,查一下,或者試一下用共陽的數組
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎影视一区二区 | 人人叉 | 欧美aaa级 | 免费国产一区二区 | 天堂网avav| 夜色www国产精品资源站 | 欧美四虎| 日本久久精品视频 | 国产精品免费av | 伊人久久成人 | 黄色大片观看 | 伊人网站在线 | 国产a区| 综合久久久久久久 | 日韩美av | 亚洲午夜精品 | 精品亚洲一区二区 | 久久精品在线免费视频 | 91视频在线看 | 亚洲综合二区 | 欧美三级视频在线观看 | 91精品国产777在线观看 | 超碰在线网站 | 亚洲综合在线视频 | 欧美福利一区 | 日韩字幕一区 | 国产精品无码久久久久 | 午夜影院在线免费观看视频 | 久久国| 高清国产一区二区 | 一级片片 | 久久精品亚洲精品 | 噜噜噜噜狠狠狠7777视频 | 亚洲v区| www精品| 久久久一二三区 | 亚洲高清视频一区二区 | 久久精品日产第一区二区三区 | 亚洲九九精品 | 日韩免费视频一区二区 | 伊人无码高清 |