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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1620|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

能幫我看看單片機(jī)代碼那錯了嗎?數(shù)碼管一直不亮

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1058641 發(fā)表于 2023-3-22 22:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1)通過超聲波傳感器采集距離數(shù)據(jù),距離值保留整數(shù)。  
2)通過數(shù)碼管顯示距離顯示界面和參數(shù)顯示界面,界面可以通過按鍵進(jìn)行切換。
3)通過按鍵設(shè)置與調(diào)整距離參數(shù)。
4)通過串口向PC端發(fā)送當(dāng)前距離數(shù)據(jù)。
5)通過LED指示燈進(jìn)行報警功能。
3.2 數(shù)碼管顯示
1)距離顯示界面
圖2 距離顯示界面(155cm)
2)參數(shù)顯示界面
圖3 參數(shù)顯示界面(155cm)
3.3 按鍵功能
1)按鍵S4定義為“切換”按鍵,按下S4按鍵,能夠切換“距離顯示界面”、“參數(shù)顯示界面”。
圖4 按鍵S4‘切換’
2)按鍵S8定義為“參數(shù)”按鍵,在“距離顯示界面”時,按下S8按鍵,可將當(dāng)前距離數(shù)據(jù)設(shè)置為距離參數(shù)。
3)按鍵S12定義為“加”按鍵,在“參數(shù)顯示界面”時,按下S12按鍵,當(dāng)前距離參數(shù)加10cm。
圖5 按鍵S12‘加’
4)按鍵S16定義為“減”按鍵,在“距離參數(shù)界面”時,按下S16按鍵,當(dāng)前距離參數(shù)減10cm,參數(shù)值減到0為止。
  圖6 按鍵S16‘減’
5)按鍵S9定義為“發(fā)送”按鍵,每次按下,串口將當(dāng)前檢測的距離數(shù)據(jù)發(fā)送給PC端的串口調(diào)試工具。
注意:
(1)按鍵S12和按鍵S16僅在“距離參數(shù)界面”時有效
(2)按鍵S8僅在“距離顯示界面”時有效,當(dāng)按鍵S8按下后,參數(shù)顯示界面參數(shù)值隨之變化,但不會發(fā)生界面跳轉(zhuǎn)。
(3)判斷按鍵是否按下時,需進(jìn)行消抖操作,避免單次按鍵操作,觸發(fā)多次結(jié)果。
3.4 串口功能
串口發(fā)送格式
注意:
(1)D為大寫字母,其余均為小寫字母。
(2)距離數(shù)據(jù)保留整數(shù)。
3.5 LED指示燈功能
1)當(dāng)前界面處于距離顯示界面時,L1指示燈點亮,否則熄滅。
2)當(dāng)前界面處于參數(shù)顯示界面時,L2指示燈點亮,否則熄滅。
3)當(dāng)實時距離超過距離參數(shù)時,L3指示燈以0.2s的時間間隔亮、滅,否則熄滅。
4)指示燈L4-L8處于常熄滅狀態(tài)。
3.6 初始化
1)上電數(shù)碼管處于距離顯示界面。
2)距離參數(shù)值為30cm。

單片機(jī)源程序如下:
#include"reg52.h"
#include"intrins.h"
sfr AUXR=0x8e;
sfr P4=0xc0;
sbit TX=P1^0;
sbit RX=P1^1;

sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;

sbit C1=P3^4;
sbit C2=P3^5;
sbit C3=P4^2;
sbit C4=P4^4;

unsigned char code SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc1};
unsigned int time;
unsigned char set_temp=30;
unsigned char disp_mode=0,dis_nu,commend,now_temp;



void Delay12us()                //@11.0592MHz
{
        unsigned char i;

        _nop_();
        _nop_();
        _nop_();
        i = 30;
        while(--i);
}

void select573(unsigned char n)
{
        switch(n)
        {
                case 4:P2=(P2&0x1f)|0x80;break;
                case 5:P2=(P2&0x1f)|0xa0;break;
                case 6:P2=(P2&0x1f)|0xc0;break;
                case 7:P2=(P2&0x1f)|0xe0;break;
                case 0:P2=(P2&0x1f)|0x00;break;
        }
}

void disply_SMG(unsigned char pos,value)
{
        select573(6);
        P0=0x01<<pos;
        select573(6);
        P0=value;      
}

void init_buzz()
{
        select573(4);
        P0=0xff;
        select573(5);
        P0=0x00;
        select573(0);      
}

void init()
{
        TMOD = 0x02;
        TH0=0xfd;
        TL0=0xfd;
        TR0=1;

        SCON = 0x50;

        ES=1;
        EA=1;
        AUXR=0x00;

}

void revice() interrupt 4
{
        if(RI == 1)
        {
                commend = SBUF;
                RI=0;
        }      
}

void sendbyte(unsigned char date)
{
        SBUF = date;
        while(TI == 0);
        TI = 0;      
}

void sendstring(unsigned char *str)
{
        while(*str != '\0')
        {
                sendbyte(*str++);
        }
}

void wave_send()
{
        unsigned i;
        for(i=0;i<8;i++)
        {
                TX=1;
                Delay12us();
                TX=0;
                Delay12us();      
        }
}

unsigned char wave_co()
{
        TMOD&=0x0f;
        TH1=TL1=0;
        wave_send();
        TR1=1;
        while((RX==1)&&(TF1==0));
        TR1=0;
        if(TF1==0)
        {
                time=TH1<<8|TL1;
                return(time*0.017);
        }
        else
        TF1=0;
        return 0;               
}

void wave() interrupt 3
{
        now_temp=wave_co();      
}

void scankey()
{
        unsigned char i;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case 0:R1=0;R2=R3=R4=1;
                        if(C1==0)
                        dis_nu=0;
                        else if(C2==0)
                        dis_nu=1;
                        else if(C3==0)
                        dis_nu=2;
                        else if(C4==0)
                        dis_nu=3;
                        break;
                       
                        case 1:R2=0;R1=R3=R4=1;
                        if(C1==0)
                        dis_nu=4;
                        else if(C2==0)
                        dis_nu=5;
                        else if(C3==0)
                        dis_nu=6;
                        else if(C4==0)
                        dis_nu=7;
                        break;
                       
                        case 2:R3=0;R2=R1=R4=1;
                        if(C1==0)
                        dis_nu=8;
                        else if(C2==0)
                        {
                                sendstring("Distance:\n\r");
                                sendbyte(time);      
                        }
                        else if(C3==0)
                        dis_nu=9;
                        else if(C4==0)
                        dis_nu=0;
                        break;
                       
                        case 3:R4=0;R2=R3=R1=1;
                        if(C1==0)
                        {
                                disp_mode=~disp_mode;      
                        }
                        else if(C2==0)
                        {
                                set_temp=now_temp;      
                        }
                        else if(C3==0)
                        {
                                set_temp=(set_temp+10);
                        }
                        else if(C4==0)
                        {
                                set_temp=(set_temp-10);
                                if(set_temp<0)
                                set_temp=0;
                        }
                        break;      
                }
        }
        if(i>4)i=0;               
}

void Delay500us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 60;
        j = 934;
        do
        {
                while (--j);
        } while (--i);
}

void show_SMG()
{
        if(disp_mode==0)
        {
                disply_SMG(0,SMG[12]);
                Delay500us();
                disply_SMG(1,SMG[1]);
                Delay500us();
                disply_SMG(2,SMG[11]);
                Delay500us();
                disply_SMG(3,SMG[11]);
                Delay500us();
                disply_SMG(4,SMG[11]);
                Delay500us();
                disply_SMG(5,SMG[now_temp/100]);
                Delay500us();
                disply_SMG(6,SMG[now_temp%100/100]);
                Delay500us();
                disply_SMG(7,SMG[now_temp%10]);
                Delay500us();
        }
      
        if(disp_mode==1)
        {
                disply_SMG(0,SMG[12]);
                Delay500us();
                disply_SMG(1,SMG[2]);
                Delay500us();
                disply_SMG(2,SMG[11]);
                Delay500us();
                disply_SMG(3,SMG[11]);
                Delay500us();
                disply_SMG(4,SMG[11]);
                Delay500us();
                disply_SMG(5,SMG[set_temp/100]);
                Delay500us();
                disply_SMG(6,SMG[set_temp%100/100]);
                Delay500us();
                disply_SMG(7,SMG[set_temp%10]);
                Delay500us();
        }      
}

void main()
{
        init_buzz();
        wave_co();
        init();
        while(1)
        {
                 scankey();
                show_SMG();
        }
}


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

使用道具 舉報

沙發(fā)
ID:94031 發(fā)表于 2023-3-23 06:46 | 只看該作者
數(shù)碼管亮不亮和軟件,硬件都有關(guān),光發(fā)軟件不行。
回復(fù)

使用道具 舉報

板凳
ID:1058641 發(fā)表于 2023-3-23 12:16 | 只看該作者
硬件是IAP15F2K61S2的51單片機(jī)
回復(fù)

使用道具 舉報

地板
ID:180919 發(fā)表于 2023-3-24 12:11 | 只看該作者
要有原理圖才行。
回復(fù)

使用道具 舉報

5#
ID:160385 發(fā)表于 2023-3-24 14:52 | 只看該作者
示波器量單片機(jī)引腳是否有輸出
回復(fù)

使用道具 舉報

6#
ID:94031 發(fā)表于 2023-3-24 16:08 | 只看該作者
rtyweq 發(fā)表于 2023-3-23 12:16
硬件是IAP15F2K61S2的51單片機(jī)

不光跟單片機(jī)有關(guān),跟外圍器件,連線都有關(guān)
回復(fù)

使用道具 舉報

7#
ID:143767 發(fā)表于 2023-3-24 16:56 | 只看該作者
數(shù)碼管是怎么驅(qū)動的?你除了要發(fā)軟件代碼,硬件也要發(fā)原理圖,才能幫你看哪里有問題
回復(fù)

使用道具 舉報

8#
ID:1058641 發(fā)表于 2023-3-25 00:01 | 只看該作者
解決了,位選錯了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 毛片韩国 | 日韩欧美成人一区二区三区 | www.色综合 | 亚洲视频在线观看一区二区三区 | 99精品在线免费观看 | 91麻豆精品国产91久久久更新资源速度超快 | 粉嫩粉嫩芽的虎白女18在线视频 | 成人免费视频网 | 51ⅴ精品国产91久久久久久 | 亚洲精品小视频在线观看 | 产真a观专区 | 91私密视频 | 亚洲国产精品福利 | 欧美久久久久 | 国产观看| 久久精品免费一区二区三 | 97人人超碰| 国产男人的天堂 | 久久久久久久综合色一本 | 无码日韩精品一区二区免费 | 在线播放中文字幕 | 亚洲精品4 | 日韩精品不卡 | 亚洲精品国产区 | 欧美日韩免费在线 | 国产精品久久久久久福利一牛影视 | japan21xxxxhd美女| 中文字幕一区二区三区不卡在线 | 日韩免费视频一区二区 | av毛片在线播放 | 欧美一区二区三区久久精品 | 久久久久无码国产精品一区 | 91免费视频观看 | 欧美日韩综合视频 | 盗摄精品av一区二区三区 | 欧美日韩国产精品激情在线播放 | 成年人在线观看 | 午夜网| 国产精品1区2区 | 一区二区三区电影在线观看 | 欧美综合一区 |