[求助] stc51数码管 从 0.01 到 99.99 累加的C程序

嵌入式追溯者   2016-5-22 16:00 楼主
   hlep  ma   stc51数码管 从 0.01 到 99.99 累加的C程序  

回复评论 (5)

没有电路图,怎么写,而且基本的51学习教程里就有这样的例子吧
点赞  2016-5-22 19:07
这个这么简单!何必这个纠结与小数点呢?从1到9999的计数会不,存在数组里,5个元素
0---->千位
1---->百位
2---->小数点
3---->十位
4---->个位

懂吗?
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2016-5-22 19:32
引用: ywlzh 发表于 2016-5-22 19:32
这个这么简单!何必这个纠结与小数点呢?从1到9999的计数会不,存在数组里,5个元素
0---->千位
1---->百 ...

谢谢,已懂
点赞  2016-5-22 19:50
#include "reg51.h"       //包含头文件

sbit LE1=P2^0;           //位选573锁存器使能
sbit LE2=P2^1;           //段选573锁存器使能


#define uchar unsigned char
#define uint  unsigned int

uchar wei;
float num;

uchar code dis[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                   //  0    1    2    3    4    5    6    7   
                     0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F的段码
                   //  8    9    A    B    C    D    E    F  


//**************************************************************************************************
//延时函数
//**************************************************************************************************
delay(uint time)              //int型数据为16位,所以最大值为65535            
{
  uint  i,j;                  //定义变量i,j,用于循环语句
  for(i=0;i      for(j=0;j<50;j++);       //for循环,循环50次
}
//**************************************************************************************************
//动态扫描函数
//**************************************************************************************************
scan()
{
  uchar i;
  for(i=0;i<10;i++)
   {
     //显示个位
     P1=0xdf;                 //0xbf=1011 1111,即选通个位  11011111
     LE1=1;                   //锁存位
     LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
     wei=num*100;
     P1=dis[wei/100]| 0x80;   //dis[wei/10]为0~9的编码,0x80为小数点
     LE2=1;                   //锁存段码
     LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
     delay(100);              //延时保持一下,延时过大会闪动,延时过小会有重影   

     P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影
     //显示十分位
     P1=0xbf;                 //0xbf=0111 1111,即选通十分位         10111111
     LE1=1;                   //锁存位
     LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
     wei=num*100;
     P1=dis[wei/10%10];          //0~9的编码
     LE2=1;                   //锁存段码
     LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
     delay(100);              //延时保持一下,延时过大会闪动,延时过小会有重影  

     P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影   
                P1=0x7f;                 //0xbf=0111 1111,即选通十(百)分位
     LE1=1;                   //锁存位
     LE1=0;                   //断开锁存,位选573的Q7~Q0仍保持
     wei=num*100;
     P1=dis[wei%10];          //0~9的编码
     LE2=1;                   //锁存段码
     LE2=0;                   //断开锁存,段选573的Q7~Q0仍保持
     delay(100);              //延时保持一下,延时过大会闪动,延时过小会有重影  

     P1=0x00;LE2=1;LE2=0;     //清除P1口数据,以免造重影  
   }

    if(num==9.99)num=0;        //扫描到显示9.9时,重新开始扫描
    num+=0.01;                 //num加0.1
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
void main()                   //主函数
{
     num=0;                   //初始化段码为0
     while(1)                 //进入while死循环
      {
        scan();               //数码管扫描函数
      }         
}
点赞  2016-5-22 19:52
引用: yuzhimude 发表于 2016-5-22 19:07
没有电路图,怎么写,而且基本的51学习教程里就有这样的例子吧

恩恩,明白了
点赞  2016-5-22 19:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复