找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2843|回复: 9
收起左侧

2位数码管单片机程序,个位数一直闪烁,求指导

[复制链接]
ID:777689 发表于 2020-6-12 21:50 | 显示全部楼层 |阅读模式
#include "reg51.h"
unsigned char b[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char i;
sbit key=P3^0;
sbit wei1=P2^0;
sbit wei2=P2^1;
void delay(int x)
{        
        int i,j;
        for (i=1;i<x;i++)        
        for (j=1;j<600;j++);
}        
void display(int tens,int ones)
{
        int i;
        for(i=20;i>0;i--)

        {
                wei1=0;
                wei2=1;
                P0=b[tens];
                delay(12);
                wei1=1;
                wei2=0;
                P0=b[ones];
                delay(10);
        }
}
void  main()
{
        int one=0,ten=0;
        P2=0x2f;
        
        while(key==0)
        {
        
                for(ten=0;ten>=0;ten--)
                {
                        for(one=9;one>=0;one--)
                        {
                                display(ten,one);
                        }
                }
                P2=0x8f;
                for(ten=0;ten>=0;ten--)
                {
                        for(one=9;one>=0;one--)
                        {
                                display(ten,one);
                        }
                }        
                P2=0X2f;
                break;
        }        
}

SV50BCOBF5`(FS7AZ_(SYDV.png
回复

使用道具 举报

ID:332444 发表于 2020-6-13 05:55 | 显示全部楼层
闪烁是频率问题,频率问题调节延时。
回复

使用道具 举报

ID:777689 发表于 2020-6-13 10:45 | 显示全部楼层
xianfajushi 发表于 2020-6-13 05:55
闪烁是频率问题,频率问题调节延时。

两个灯延时一样,但是一个闪一个不闪
回复

使用道具 举报

ID:213173 发表于 2020-6-13 10:57 | 显示全部楼层
楼主要找一个成熟程序参考。这main()函数基本结构都不对,自己凭想象胡乱写的根本玩不转。除了重新写根本没法改。
回复

使用道具 举报

ID:744327 发表于 2020-6-13 13:16 | 显示全部楼层
主函数需要加while(1){

}
回复

使用道具 举报

ID:332444 发表于 2020-6-14 04:51 | 显示全部楼层
你的这种数码管驱动代码,嵌套循环属不必,外层循环只一次可省,你说对不?送去显示的2位数一位为0,另一位为9-0变化,一位0不变的显示显然看不出多大变化,好似正常显示一样。把延时里面的嵌套循环量600调整到30试看显示是否有变化。
回复

使用道具 举报

ID:332444 发表于 2020-6-14 08:33 | 显示全部楼层
  1. void main()
  2. {
  3.         unsigned char wei=1,Xd=47;
  4.         unsigned int Ys=47474;
  5.         while(1)
  6.         {
  7.                 if(!--Ys)
  8.                 {
  9.                         P2=wei;
  10.                         P0=~b[wei==1?Xd-Xd/10*10:Xd/10];
  11.                         if(++wei>2)wei=1;//数码管动态显示
  12.                         Ys=1474;//延时调节
  13.                 }
  14.         }
  15. }
复制代码
回复

使用道具 举报

ID:778724 发表于 2020-6-14 09:44 | 显示全部楼层
main函数有问题,再好好研究一下
回复

使用道具 举报

ID:332444 发表于 2020-6-14 10:12 | 显示全部楼层
  1. #include "reg52.h"
  2. unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号
  3. void main()
  4. {
  5.         unsigned char wei=1,Xd=47;
  6.         unsigned int Ys=47474;
  7.         while(1)
  8.         {
  9.                 if(!--Ys)
  10.                 {
  11.                         P2=wei;
  12.                         P0=~smgduan[wei==1?Xd-Xd/10*10:Xd/10];
  13.                         if(++wei>2)wei=1,++Xd;//数码管动态显示
  14.                         if(Xd>99)Xd=0;
  15.                         Ys=4747;
  16.                 }
  17.         }
  18. }
复制代码
数码管型号末尾-AC
无标题.png



回复

使用道具 举报

ID:332444 发表于 2020-6-15 10:18 | 显示全部楼层
录像35_转.gif
2位数码管型号:7SEG-MPX2-CA
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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