找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于两位一体共阳极数码管MCU编程问题

[复制链接]
ID:393736 发表于 2018-12-25 23:29 | 显示全部楼层 |阅读模式
两位共阳极数码管  要求显示 00 10 20一直到90  请问应该怎么编程  
还有就是仿真图如何绘制

QQ图片20181225232901.png
回复

使用道具 举报

ID:277550 发表于 2018-12-26 00:11 | 显示全部楼层


先找一段代码,看一下,就清楚了。。。。。。。
回复

使用道具 举报

ID:449525 发表于 2018-12-26 08:28 | 显示全部楼层
网上代码多的很,自己去百度查找下就清除了,就是7个IO口01控制一个数码管。
回复

使用道具 举报

ID:393736 发表于 2018-12-26 08:58 | 显示全部楼层
devcang 发表于 2018-12-26 00:11
先找一段代码,看一下,就清楚了。。。。。。。

经过检查 图没有问题
现在问题就是段选和位选编程那部分 只用一个段选就好用

用两个就出问题  
回复

使用道具 举报

ID:451718 发表于 2018-12-26 10:13 | 显示全部楼层
那你就得把程序贴出来,大家才能知道问题在哪里呀
回复

使用道具 举报

ID:393736 发表于 2018-12-26 14:18 来自手机 | 显示全部楼层
robinsonlin 发表于 2018-12-26 10:13
那你就得把程序贴出来,大家才能知道问题在哪里呀

如下。麻烦看一下 是不是哪里有问题
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char                                                         
uchar time;
double count=50;        //定义占空比,并初始占空比为50%
sbit PWM=P3^0;      //P2^0口输出PWM
sbit zkb_add=P3^6;   //占空比增加的按键 的I/O口
sbit zkb_dec=P3^7;   //占空比减小 的按键 的I/O口
sbit dula=P2^2;
sbit wela=P2^3;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //共阴极数码管0~9编码
/************函数声明**************/
void delayms(uint z); //延时
void keyscan();          //扫描按键
void timer0_init();   //定时器0初始化
/****************延时处理**********************/
void delayms(uint z) //延时xms程序
{
    uint x,y;
        for(y=z;x>0;x--)
                for(y=110;y>0;y--);
}

/*******数码管显示占空比********************/
void display_pwm(int num)//占空比显示
{
  uchar shi;
  shi=num/10;


  dula=0;
  P1=table[shi];
  delayms(10);
  dula=1;

  wela=0;
  P1=table[0];
  delayms(10);
  wela=1;
}




void keyscan()  //按键扫描
{

       if(zkb_add==0)            
       {
             delayms(1);  count=count+10;        //每按一次占空比增加按键占空比加10%
          if(count>=100)                              //限定占空比上限
                   {
                     count=0;
                     }
        }
      if(zkb_dec==0)
      {  delayms(1);
          count=count-10;                 //每按一次占空比减小按键占空比减10%
               if(count<0)    //限定占空比下限
               {
        count=100;
               }
  }
       
}

/***********定时器0初始化***********/
void timer0_init()
{
  TMOD=0x01; //定时器0工作于方式1
  TH0=(65536-10)/256;
  TL0=(65536-10)%256;
  TR0=1;
  ET0=1;
  EA=1;
}

/**************定时0中断处理******************/
void timer0_int() interrupt 1
{
       
  TR0=0;    //设置定时器初值期间,关闭定时器
  TH0=(65536-10)/256;
  TL0=(65536-10)%256;
  TR0=1;
  time++;
  
  if(time<count)          //count为占空比
  {
        PWM=1;           //输出高电平
  }
  else
        PWM=0;       
  if(time>=100)
  {
        time=0;
  }

  display_pwm(count);

}

/*********主函数********************/
void main()
{         
        timer0_init();
        delayms(1);
        while(1)
        {
         keyscan();
        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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