hlep ma stc51数码管 从 0.01 到 99.99 累加的C程序
没有电路图,怎么写,而且基本的51学习教程里就有这样的例子吧
这个这么简单!何必这个纠结与小数点呢?从1到9999的计数会不,存在数组里,5个元素
0---->千位
1---->百位
2---->小数点
3---->十位
4---->个位
懂吗?
天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
#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(); //数码管扫描函数
}
}