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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1521|回復: 6
打印 上一主題 下一主題
收起左側

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

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

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

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

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

求教,謝謝各位!

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

13.39 KB, 下載次數: 6

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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;
      
                                
}
回復

使用道具 舉報

5#
ID:332444 發表于 2021-12-23 08:03 | 只看該作者
瞄了一下,首先在中斷使用延時就是頭上安頭.
回復

使用道具 舉報

6#
ID:624769 發表于 2021-12-23 19:49 | 只看該作者
簡單看了下, 覺得還是放棄治療,直接重寫吧,你一定要搶救一下的話,

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

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

使用道具 舉報

7#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产日韩91久久久久久 | 国产一在线观看 | 喷潮网站| 日本中文字幕在线视频 | 黄色片在线看 | 人人九九精 | 国产精品久久久久久久久久久久久 | 91资源在线 | 综合色导航| 欧美 日韩 中文 | 久久国产精品一区二区三区 | 黄色网址免费在线观看 | 三a毛片| ww 255hh 在线观看 | 在线观看国产精品一区二区 | 一区二区三区在线免费观看 | 亚洲欧美中文日韩在线v日本 | 亚洲精品国产偷自在线观看 | 国产视频二区在线观看 | 亚洲av毛片 | 久草网址 | aaaaaaa片毛片免费观看 | 操夜夜 | 国产中文字幕在线观看 | 免费观看av网站 | 老妇激情毛片免费 | 欧美日韩在线高清 | 久久99精品久久久久久 | 在线日韩福利 | 精品欧美在线观看 | 国产成人免费视频网站高清观看视频 | 亚洲午夜三级 | 日本精品久久久一区二区三区 | 日日干日日操 | 中文字幕精品视频 | 色吊丝2| av中文在线 | 日本一区二区三区免费观看 | 欧美日韩中文国产一区发布 | 五月综合激情在线 | 久久亚洲欧美日韩精品专区 |