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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波測距,四位數碼管顯示,stc15f104w單片機為什么程序只能跑一次?

[復制鏈接]
ID:481965 發表于 2019-3-27 23:22 | 顯示全部樓層 |閱讀模式
四位數碼管使用的是兩個74hc595
#include<reg52.h>
#include<intrins.h>


sbit  Echo=  P3^3;
sbit  Trig=  P3^2;
unsigned int  time=0;

typedef unsigned char uchar;
typedef unsigned int uint;

/**********函數聲明********************/
void SendTo595(uchar byteData);
void xianshi(uint shu);
/***********************************/

sbit DS = P3^1;    //p3.4串行數據輸入   DS
sbit SH_CP = P3^0;    //串行輸入時鐘,上升沿有效
sbit ST_CP = P3^5;    //串行寄存器時鐘,上升沿有效
char code DISP[] = {0xf5, 0x05, 0xb3, 0x97, 0x47, 0xd6, 0xf6, 0x85, 0xf7,0xd7};
char code QQ[]={0x70,0xb0,0xd0,0xe0};
uchar j;//顯示時間
uint  S=0;
//uint q;

void delay(uint z)//延時1ms
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<114;y++)
{
}
}
}



void timer0 (void) interrupt 1
{

for(S=9900;S<9999;S++){xianshi(S);}

}  



void Time_Init()
{
         TMOD=0x01;        //設T0為方式1,GATE=1;
         TH0=0;
         TL0=0;
     ET0=0;
         EA=1;
         TR0 = 0;        
}        


void main()
{
Time_Init();
//for(S=0;S<9999;S++){xianshi(S);}
        Trig=1;                        //啟動一次模塊
        _nop_();
        _nop_();
   _nop_();
        _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
          _nop_();
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         Trig=0;
Echo=1;
         while(!Echo);
        TR0=1;                        
         while(Echo);               
         TR0=0;
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;        
         S=(time*1.87)/100;//算出來是CM(time*1.87)/100;
xianshi(S);

}
        
        

//發送一個字節數據給595再并行輸出

void SendTo595(uchar Data)
{
   char i;
/*for(i=0;i<8;i++)
   {
                    SH_CP = 0;
                 
        DS=0x80&Data1;//&為按位運算符,即全1為1,有0為0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位為1則是1高位為0則這個式子為0
                 
        Data1=_crol_(Data1,1); //左移一位 將高位補給低位,如果二進制數為01010101 那么_crol_(1) 為10101010

        SH_CP = 1;          //上升沿讓串行輸入時鐘變成高電平 并延時一個時鐘周期
        _nop_();

   }  
*/

   for(i=0;i<8;i++)
   {
                    SH_CP = 0;
                 
        DS=0x80&Data;//&為按位運算符,即全1為1,有0為0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位為1則是1高位為0則這個式子為0
                 
        Data=_crol_(Data,1); //左移一位 將高位補給低位,如果二進制數為01010101 那么_crol_(1) 為10101010

        SH_CP = 1;          //上升沿讓串行輸入時鐘變成高電平 并延時一個時鐘周期
        _nop_();

   }  

  /*  ST_CP = 0;
         _nop_();
         位移寄存器完畢,轉移到存儲寄存器
   ST_CP = 1;         //上升沿,存儲寄存器變為高電平 延遲兩個時鐘周期
   _nop_();
   _nop_();
*/

}


void xianshi(uint shu)

{


uint qian;
uint bai;
uint shi;
uint ge;

qian=shu/1000;
bai=(shu-(qian*1000))/100;
shi=(shu-(qian*1000)-(bai*100))/10;
ge=shu-(qian*1000)-(bai*100)-(shi*10);


//SendTo595(QQ[3]);
//SendTo595(DISP[0]);
//SendTo595(DISP[1]);

//delay(4000);
//SendTo595(DISP[2]);
//SendTo595(DISP[0]);

                                                /*        for(j=0;j<4;j++)
                                                        {
                                                        for(k=0;k<10;k++)
                                                        {}}*/

for(j=0;j<20;j++)
{
SendTo595(QQ[0]);
SendTo595(DISP[ge]);
ST_CP = 0;
         _nop_();
         //位移寄存器完畢,轉移到存儲寄存器
   ST_CP = 1;         //上升沿,存儲寄存器變為高電平 延遲兩個時鐘周期
   _nop_();
  // _nop_();

delay(5);

SendTo595(QQ[1]);
SendTo595(DISP[shi]);
ST_CP = 0;
         _nop_();
         //位移寄存器完畢,轉移到存儲寄存器
   ST_CP = 1;         //上升沿,存儲寄存器變為高電平 延遲兩個時鐘周期
   _nop_();
  // _nop_();

delay(5);
SendTo595(QQ[2]);
SendTo595(DISP[bai]);
ST_CP = 0;
         _nop_();
         //位移寄存器完畢,轉移到存儲寄存器
   ST_CP = 1;         //上升沿,存儲寄存器變為高電平 延遲兩個時鐘周期
   _nop_();
  // _nop_();

delay(5);

SendTo595(QQ[3]);
SendTo595(DISP[qian]);
ST_CP = 0;
         _nop_();
         //位移寄存器完畢,轉移到存儲寄存器
   ST_CP = 1;         //上升沿,存儲寄存器變為高電平 延遲兩個時鐘周期
   _nop_();
  // _nop_();

delay(5);

}


}
回復

使用道具 舉報

ID:213173 發表于 2019-3-28 08:31 | 顯示全部樓層
main()函數中沒有while(1)主循環,怎么可能正常運行?照抄也得抄完整啊!
回復

使用道具 舉報

ID:416287 發表于 2019-3-28 09:08 | 顯示全部樓層
首先你的主函數里面沒有while(1)循環  所以你的程序只能跑一次就結束
回復

使用道具 舉報

ID:481965 發表于 2019-3-28 18:32 | 顯示全部樓層
wulin 發表于 2019-3-28 08:31
main()函數中沒有while(1)主循環,怎么可能正常運行?照抄也得抄完整啊!

之前寫了while也一樣,跑一遍就只能顯示數碼管左邊一個0
回復

使用道具 舉報

ID:481965 發表于 2019-3-28 18:33 | 顯示全部樓層
奮斗的小白熊 發表于 2019-3-28 09:08
首先你的主函數里面沒有while(1)循環  所以你的程序只能跑一次就結束

之前寫了while也一樣,跑一遍就只能顯示數碼管左邊一個0
回復

使用道具 舉報

ID:213173 發表于 2019-3-28 21:32 | 顯示全部樓層
而投入與天一 發表于 2019-3-28 18:32
之前寫了while也一樣,跑一遍就只能顯示數碼管左邊一個0

細看了一下程序,幾乎從頭至尾都錯了。首先你對stc15f104w這個芯片根本不了解。程序構架、超聲波測距模塊和74hc595的驅動程序統統錯
回復

使用道具 舉報

ID:555922 發表于 2019-6-8 19:28 | 顯示全部樓層
沒有循環,怎么簡單
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 大学生a级毛片免费视频 | 亚洲国产欧美一区二区三区久久 | 亚洲欧美一区二区三区国产精品 | 日韩高清www | 国产精品久久久久久久粉嫩 | 亚洲欧美日韩网站 | 成人免费观看视频 | 天天天操操操 | 亚洲精品一区二区网址 | 亚洲一区二区日韩 | 国产精品欧美一区二区 | 久久久久午夜 | 国产精品中文字幕在线播放 | 精品国产一区二区三区日日嗨 | 99这里只有精品视频 | 国产一区二区三区日韩 | 国产精品视频500部 a久久 | 99热播放| 成人字幕网zmw| 久久精品国产一区二区三区 | 色av一区二区三区 | 国产福利在线看 | 精品国产欧美一区二区三区成人 | 国产精品一区二区三区四区 | 97起碰| 免费看国产片在线观看 | 九九热久久免费视频 | 欧美色成人| 国产精品毛片一区二区三区 | 成人亚洲精品久久久久软件 | 日韩欧美手机在线 | 精品91av| 偷拍自拍网站 | 亚洲精品一二三 | 99福利视频 | 久久99精品国产 | 国产欧美一区二区三区日本久久久 | 不卡在线视频 | 99re99| 激情的网站| 日本不卡免费新一二三区 |