找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2303|回復(fù): 5
收起左側(cè)

關(guān)于單片機數(shù)碼管動態(tài)顯示問題

[復(fù)制鏈接]
ID:723431 發(fā)表于 2020-4-26 11:23 | 顯示全部樓層 |閱讀模式
用數(shù)碼管顯示四相異步電動機的步數(shù),為什么會亂顯示?正反轉(zhuǎn)和停止都沒有問題。
程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit key1=P3^0;           //正轉(zhuǎn)
sbit key2=P3^1;           //反轉(zhuǎn)
sbit key3=P3^2;           //停止
sbit a=P2^0;
sbit b=P2^1;
sbit c=P2^2;
sbit d=P2^3;
sbit P10=P1^0;
sbit P11=P1^1;
uchar num1=0;
uchar num2=0;
uchar bushu,flag;
void zheng(void);
void fan(void);
void ting(void);
void key_scan(void);
void delay1m(uint x)
{
        uint i,j;
        for(i=0;i<x;i++)
                for(j=0;j<200;j++);
}
void delay5ms(void)
{
        unsigned char i,j;
        for(i=10;i>0;i--)
                for(j=248;j>0;j--);
}
void main()
{
        flag=0;
        while(1)
        {
                key_scan();
                switch(flag)
                {
                        case 1:zheng();break;
                        case 2:fan();break;
                        case 3:ting();break;
                }
        }
}
void zheng()
{
        switch(num1)
        {
                case 0:a=1;b=0;c=0;d=0;delay1m(100);break;               
                case 1:a=1;b=1;c=0;d=0;delay1m(100);break;        
                case 2:a=0;b=1;c=0;d=0;delay1m(100);break;               
                case 3:a=0;b=1;c=1;d=0;delay1m(100);break;               
                case 4:a=0;b=0;c=1;d=0;delay1m(100);break;               
                case 5:a=0;b=0;c=1;d=1;delay1m(100);break;               
                case 6:a=0;b=0;c=0;d=1;delay1m(100);break;               
                case 7:a=1;b=0;c=0;d=1;delay1m(100);break;        
        }
        P0=0xff;
        P10=1;
        P11=0;
        P0=zixingma[bushu/10];
        delay5ms();
        P0=0xff;
        P10=0;
        P11=1;         
        P0=zixingma[bushu%10];
        delay5ms();
        num1++;
        bushu++;
        delay1m(200);
        if(num1==8)
                num1=0;
}
void fan()
{
        switch(num2)
        {
                case 0:a=1;b=0,c=0,d=0;delay1m(100);break;
                case 1:a=1;b=0,c=0,d=1;delay1m(100);break;
                case 2:a=0;b=0,c=0,d=1;delay1m(100);break;
                case 3:a=0;b=0,c=1,d=1;delay1m(100);break;
                case 4:a=0;b=0,c=1,d=0;delay1m(100);break;
                case 5:a=0;b=1,c=1,d=0;delay1m(100);break;
                case 6:a=0;b=1,c=0,d=0;delay1m(100);break;
                case 7:a=1;b=1,c=0,d=0;delay1m(100);break;
        }
        P0=0xff;
        P10=1;
        P11=0;
        P0=zixingma[bushu/10];
        delay5ms();
        P0=0xff;
        P10=0;
        P11=1;
        P0=zixingma[bushu%10];
        delay5ms();
        num2++;
        bushu++;
        delay1m(200);
        if(num2==8)
                num2=0;
}
void ting()
{
        P1=0;
        P2=0;
        num1=0;
        num2=0;
        flag=0;
        P0=0xff;
        bushu=0;        
        delay1m(200);
}
void key_scan()
{
        if(key1==0)
        {
                delay5ms();
                if(key1==0)
                {
                        flag=1;
                        bushu=0;
                        while(key1==1)
                                delay5ms();
                }
        }
        if(key2==0)
        {
                delay5ms();
                if(key2==0)
                {
                        flag=2;
                        bushu=0;
                        while(key2==1)
                                delay5ms();
                }
        }
        if(key3==0)
        {
                delay5ms();
                if(key3==0)
                {
                        flag=3;
                        while(key3==1)
                                delay5ms();
                }
        }        
}

1S~SI76VK%R6W(AZPAN[_LL.png
回復(fù)

使用道具 舉報

ID:636538 發(fā)表于 2020-4-26 13:31 | 顯示全部樓層
建議P1.0、P1.1接上拉電阻,同時你的P1.0是控制十位,P1.1控制的是個位,如果沒有理解錯的話,將fan()中,P1|=0x03,再P1|=0x02,再次消影P1|=0x03,
回復(fù)

使用道具 舉報

ID:738347 發(fā)表于 2020-4-26 13:48 | 顯示全部樓層
排阻是不是得有個上拉電阻拉出去啊,換個1-9的,1接vcc。然后數(shù)碼管那,我覺得也有接的不對的地方;仿真圖你再看看?不知道這樣也沒有用,試試看吧

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2020-4-26 15:09 | 顯示全部樓層
樓主排阻接錯了,按如下接法。
無標(biāo)題.jpg

回復(fù)

使用道具 舉報

ID:723431 發(fā)表于 2020-4-26 15:36 | 顯示全部樓層
wulin 發(fā)表于 2020-4-26 15:09
樓主排阻接錯了,按如下接法。

謝謝,解決了
回復(fù)

使用道具 舉報

ID:723431 發(fā)表于 2020-4-26 15:36 | 顯示全部樓層
bJFKLJklfje 發(fā)表于 2020-4-26 13:48
排阻是不是得有個上拉電阻拉出去啊,換個1-9的,1接vcc。然后數(shù)碼管那,我覺得也有接的不對的地方;仿真圖 ...

嗯嗯,解決了,謝謝
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表