找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2286|回复: 5
收起左侧

关于单片机数码管动态显示问题

[复制链接]
ID:723431 发表于 2020-4-26 11:23 | 显示全部楼层 |阅读模式
用数码管显示四相异步电动机的步数,为什么会乱显示?正反转和停止都没有问题。
程序如下:
#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;           //正转
sbit key2=P3^1;           //反转
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
回复

使用道具 举报

ID:636538 发表于 2020-4-26 13:31 | 显示全部楼层
建议P1.0、P1.1接上拉电阻,同时你的P1.0是控制十位,P1.1控制的是个位,如果没有理解错的话,将fan()中,P1|=0x03,再P1|=0x02,再次消影P1|=0x03,
回复

使用道具 举报

ID:738347 发表于 2020-4-26 13:48 | 显示全部楼层
排阻是不是得有个上拉电阻拉出去啊,换个1-9的,1接vcc。然后数码管那,我觉得也有接的不对的地方;仿真图你再看看?不知道这样也没有用,试试看吧

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2020-4-26 15:09 | 显示全部楼层
楼主排阻接错了,按如下接法。
无标题.jpg

回复

使用道具 举报

ID:723431 发表于 2020-4-26 15:36 | 显示全部楼层
wulin 发表于 2020-4-26 15:09
楼主排阻接错了,按如下接法。

谢谢,解决了
回复

使用道具 举报

ID:723431 发表于 2020-4-26 15:36 | 显示全部楼层
bJFKLJklfje 发表于 2020-4-26 13:48
排阻是不是得有个上拉电阻拉出去啊,换个1-9的,1接vcc。然后数码管那,我觉得也有接的不对的地方;仿真图 ...

嗯嗯,解决了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表