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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1626|回復: 6
收起左側

單片機超聲波檢測距離并在兩片74HC595芯片驅動四位一體數碼管上顯示的問題

[復制鏈接]
ID:995771 發表于 2021-12-22 17:13 | 顯示全部樓層 |閱讀模式
各位大佬,目前我有兩個程序,一個是超聲波模塊程序(沒問題),另一個是595驅動四位一體數碼管的程序,數碼管程序的結果是顯示4321,可以顯示也沒問題。
但是我把它們兩個放到一起,想實現標題內容,發現數碼管最高位亮,后面三位一閃一閃的很暗,并且不能實現功能。

以為是數碼管的程序不能實現變量(距離的變化),只能實現常量(4321),就單獨把數碼管的程序修改了一下,可以實現數字在數碼管上來回變化,在附件的《中斷實現數碼管變量變化》。

之后我以為可以了,就把一樣的格式放到總程序里面,發現還是最高位亮,后面三位很暗,一閃一閃的。如附件《出現問題的程序》

怎么才能讓它4位都正常發光而且能實現距離變化時數碼管上的數字也變化?

求教,謝謝各位!

中斷實現數碼管變量變化.zip

13.39 KB, 下載次數: 6

回復

使用道具 舉報

ID:995771 發表于 2021-12-22 18:59 | 顯示全部樓層
出問題的程序 代碼如下:
#include <AT89X51.H>
#define uint unsigned int
#define uchar unsigned char
sbit Tx=P2^1;                                                
sbit Rx=P2^0;                                                
bit TimeUp=0;                                                
int Th0,Tl0;
unsigned int time0=0;





void main (void);                                       
void LED4_Display (void);                        
void LED_OUT(uchar X);                                
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char disbuf[4]={0,0,0,0};
unsigned char code LED_0F[];               
sbit DIO=P1^0;                                
sbit RCLK=P1^1;                                
sbit SCLK=P1^2;                                

uchar LED[8];        
uint Measureresult=0;

void delay(unsigned int xms)
{
                unsigned char j;
                while(xms--)
                {
                                for(j=0;j<125;j++);
                }
}

void LED4_Display (void)
{
        unsigned char code *led_table;         
        uchar i;
        
        led_table = LED_0F + LED[0];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x01);               

        RCLK = 0;
        RCLK = 1;
        
        led_table = LED_0F + LED[1];
        i = *led_table;

        LED_OUT(i);               
        LED_OUT(0x02);               

        RCLK = 0;
        RCLK = 1;
        
        led_table = LED_0F + LED[2];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x04);      

        RCLK = 0;
        RCLK = 1;
        
        led_table = LED_0F + LED[3];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x08);               

        RCLK = 0;
        RCLK = 1;
      

        i=0xff;
        LED_OUT(i);               
        LED_OUT(0x01);
        RCLK=0;
        RCLK=1;
                LED_OUT(i);               
        LED_OUT(0x02);
        RCLK=0;
        RCLK=1;
                LED_OUT(i);               
        LED_OUT(0x04);
        RCLK=0;
        RCLK=1;
                LED_OUT(i);               
        LED_OUT(0x08);
        RCLK=0;
        RCLK=1;
}


void LED_OUT(uchar X)
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                if (X&0x80) DIO=1; else DIO=0;
                X<<=1;
                SCLK = 0;
                SCLK = 1;
        }
}

unsigned char code LED_0F[] =
{

        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};




uint Measure(void)
{
                char Del20us=0;
                char RxBack=1;
               


                Tx=0;
                Th0=0;
                Tl0=0;
                TimeUp=0;
      

                TR0=0;
                TH0=0;
                TL0=0;
      
      

        
                Tx=1;
                for(Del20us=20;Del20us>0;Del20us--);
                Tx=0;


        
                while(Rx==0);
                TH0=0;
                TL0=0;
                TR0=1;



               
                while(RxBack)
                {
                                if(Rx==0||TimeUp==1)
                                {
                                                TR0=0;
                                                Th0=TH0;Tl0=TL0;
                                                TR0=1;
                                                RxBack=0;
                                }
                }
                while(!TimeUp);
                time0=(Th0*256+Tl0);
                Measureresult=((unsigned int)(344)*time0)/2000;
                if(Measureresult<30||Measureresult>900)
                {
                                Measureresult=0;
                }
               
                return Measureresult;
}


void T0_time() interrupt 1
{
                TimeUp=1;
}



void main()
{
                uchar ge,shi,bai,qian;
                        TMOD=0x11;
                        TH1=(65536-200)/256;
                        TL1=(65536-200)%256;

                        EA=1;
                        ET0=1;
                        ET1=1;
      
                        TR1=1;
      
                while(1)
                {
                                                ge=Measure()%1000%100%10;
                                                shi=Measure()%1000%100/10;
                                                bai=Measure()%1000/100;
                                                qian=Measure()/1000;
                                                LED[0]=ge;
                                                LED[1]=shi;
                                                LED[2]=bai;
                                                LED[3]=qian;
                              
                }
}

void T1_time() interrupt 3
{
                                TH1=(65536-200)/256;
                                TL1=(65536-200)%256;
      
                                LED4_Display ();
                                delay(15);
}
回復

使用道具 舉報

ID:301191 發表于 2021-12-23 00:46 | 顯示全部樓層
頂一下
回復

使用道具 舉報

ID:960157 發表于 2021-12-23 07:32 | 顯示全部樓層

出問題的程序 代碼如下:
#include <AT89X51.H>
#define uint unsigned int
#define uchar unsigned char
sbit Tx=P2^1;                                                
sbit Rx=P2^0;                                                
bit TimeUp=0;                                                
int Th0,Tl0;
unsigned int time0=0;





void main (void);                                       
void LED4_Display (void);                        
void LED_OUT(uchar X);                                
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char disbuf[4]={0,0,0,0};
unsigned char code LED_0F[];               
sbit DIO=P1^0;                                
sbit RCLK=P1^1;                                
sbit SCLK=P1^2;                                

uchar LED[8];        
uint Measureresult=0;

void delay(unsigned int xms)
{
                unsigned char j;
                while(xms--)
                {
                                for(j=0;j<125;j++);
                }
}

void LED4_Display (void)
{
        unsigned char code *led_table;         
        uchar i;
        
        led_table = LED_0F + LED[0];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x01);               

        RCLK = 0;
        RCLK = 1;
        
        led_table = LED_0F + LED[1];
        i = *led_table;

        LED_OUT(i);               
        LED_OUT(0x02);               

        RCLK = 0;
        RCLK = 1;
        
        led_table = LED_0F + LED[2];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x04);      

        RCLK = 0;
        RCLK = 1;
        
        led_table = LED_0F + LED[3];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x08);               

        RCLK = 0;
        RCLK = 1;
      

        i=0xff;
        LED_OUT(i);               
        LED_OUT(0x01);
        RCLK=0;
        RCLK=1;
                LED_OUT(i);               
        LED_OUT(0x02);
        RCLK=0;
        RCLK=1;
                LED_OUT(i);               
        LED_OUT(0x04);
        RCLK=0;
        RCLK=1;
                LED_OUT(i);               
        LED_OUT(0x08);
        RCLK=0;
        RCLK=1;
}


void LED_OUT(uchar X)
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                if (X&0x80) DIO=1; else DIO=0;
                X<<=1;
                SCLK = 0;
                SCLK = 1;
        }
}

unsigned char code LED_0F[] =
{

        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};




uint Measure(void)
{
                char Del20us=0;
                char RxBack=1;
               


                Tx=0;
                Th0=0;
                Tl0=0;
                TimeUp=0;
      

                TR0=0;
                TH0=0;
                TL0=0;
      
      

        
                Tx=1;
                for(Del20us=20;Del20us>0;Del20us--);
                Tx=0;


        
                while(Rx==0);
                TH0=0;
                TL0=0;
                TR0=1;



               
                while(RxBack)
                {
                                if(Rx==0||TimeUp==1)
                                {
                                                TR0=0;
                                                Th0=TH0;Tl0=TL0;
                                                TR0=1;
                                                RxBack=0;
                                }
                }
                while(!TimeUp);
                time0=(Th0*256+Tl0);
                Measureresult=((unsigned int)(344)*time0)/2000;
                if(Measureresult<30||Measureresult>900)
                {
                                Measureresult=0;
                }
               
                return Measureresult;
}


void T0_time() interrupt 1
{
                TimeUp=1;
}



void main()
{
                uchar ge,shi,bai,qian;
                        TMOD=0x11;
                        TH1=(65536-200)/256;
                        TL1=(65536-200)%256;

                        EA=1;
                        ET0=1;
                        ET1=1;
      
                        TR1=1;
      
                while(1)
                {
                                                ge=Measure()%1000%100%10;
                                                shi=Measure()%1000%100/10;
                                                bai=Measure()%1000/100;
                                                qian=Measure()/1000;
                                                LED[0]=ge;
                                                LED[1]=shi;
                                                LED[2]=bai;
                                                LED[3]=qian;
                              LED4_Display ();
                                delay(15);
                }
}

void T1_time() interrupt 3
{
                                TH1=(65536-200)/256;
                                TL1=(65536-200)%256;
      
                                
}
回復

使用道具 舉報

ID:332444 發表于 2021-12-23 08:03 | 顯示全部樓層
瞄了一下,首先在中斷使用延時就是頭上安頭.
回復

使用道具 舉報

ID:624769 發表于 2021-12-23 19:49 | 顯示全部樓層
簡單看了下, 覺得還是放棄治療,直接重寫吧,你一定要搶救一下的話,

     LED4_Display ();   這個函數,把它一拆4, 每次進定時器中斷運行 1/4 .

代碼就不幫你改了,無從下手……
回復

使用道具 舉報

ID:995771 發表于 2021-12-24 16:28 | 顯示全部樓層
188610329 發表于 2021-12-23 19:49
簡單看了下, 覺得還是放棄治療,直接重寫吧,你一定要搶救一下的話,

     LED4_Display ();   這個函 ...

謝謝,已重寫
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕欧美一区 | 色在线免费视频 | 久久久久免费观看 | 午夜专区 | 国产精品久久久久久久久久免费看 | 成人不卡| 国产精品亚洲成在人线 | 国产精品一区二区三区在线播放 | 国产中文视频 | 日韩中文一区二区三区 | 日本亚洲一区二区 | 天堂中文在线观看 | h在线 | 中文字幕日韩欧美 | 日韩中文字幕 | 免费观看的av毛片的网站 | 午夜一区 | 久久51 | 国产传媒毛片精品视频第一次 | 欧美一区二区三区在线免费观看 | 亚洲 欧美 日韩 精品 | 综合成人在线 | 在线免费国产 | 欧美一二三| 99在线免费观看 | 免费观看一区二区三区毛片 | 亚洲协和影视 | 久久久久久久久中文字幕 | 亚洲视频一区在线 | 成人免费视频7777777 | 国产成人免费视频网站视频社区 | 久久久久久国产 | 国产精品久久一区二区三区 | 中文字幕日韩欧美 | 成年人在线观看 | 99久久99 | 黑色丝袜三级在线播放 | 密室大逃脱第六季大神版在线观看 | 99re视频在线观看 | 色吧色综合 | 国内精品免费久久久久软件老师 |