共阳极数码管计数器
0到98,想要计数更大,改变sec的值就可以
注意变量led_cache
#include<STC15F2K60S2.H>
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define led_output P0
#define led_duan_and_wei P2 //共阳极数码管
unsigned char add; //变量
unsigned int num;
unsigned char sec;
uchar code tabe[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段选,1,2,3,4,5,6,7,8,9 常量
uchar code tabe1[ ]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; // 显示位选第八位到第一位
uchar tabe2[ ]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0}; //初始化显示缓冲区 变量
void main( )
{
while(1)
{
led_output=0xff;//消影 共阳极数码管是低电位有效,消隐要无效; 共阴数码管是高电位有效,消影是0x00
led_duan_and_wei=0xff;//打开段选数据
led_duan_and_wei=0x1f; //锁存段选数据573
led_output=tabe1[add];//位选
led_duan_and_wei=0xdf;//打开位选控制Y6信号,送数据
led_duan_and_wei&=0x1f; //清零,关闭U8锁存器,锁存数据
led_output=tabe2[add];// led_cache变量中取值,段选数据
led_duan_and_wei=0xff;//打开段选控制Y7信号,送数据
led_duan_and_wei&=0x1f; //清零,关闭U7锁存器 ,锁存数据
add++;
add&=0x07; //2的3次方用&,段选和位选相同
//数值运算
num++;
if(num>=50000)//控制计数器增加的时间间隔
{
num=0; //变量清0
sec++;
if(sec>=99)//控制数值的范围0-98
{
sec=0;//成立执行清0
}
tabe2[0]=tabe[sec%10]; //摘取个位
tabe2[1]=tabe[sec/10%10]; //摘取十位
tabe2[2]=tabe[sec/100%10]; //摘取百位
tabe2[3]=tabe[sec/1000%10]; //摘取千位
tabe2[4]=tabe[sec/10000%10]; //摘取万位
tabe2[5]=tabe[sec/100000%10]; //摘取十万位
tabe2[6]=tabe[sec/1000000%10]; //摘取百万位
tabe2[7]=tabe[sec/10000000%10];//摘取千万位
}
}
}