#include<reg52.h>
#include<intrins.h>
sbit sck = P0^4; //输入时钟
sbit rck = P2^3; //输出锁存
sbit si = P0^2; //串行数据输入
char code tableduan[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char code tablewei[] = {0x08,0x04,0x02,0x01,0x80,0x40,0x20,0x10};
void delay1(unsigned int i)
{
unsigned int j;
for(j = 0;j<i;j++)
{
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
}
}
void init() //输入初始化
{
si = 1;
rck = 0;
}
void sclwei(unsigned char num) //位地址
{
unsigned char i,temp;
temp = tablewei[num];
for(i = 0;i<8;i++)
{
if(temp & 0x80)
{
si = 1;
}
else
{
si = 0;
}
_nop_();
temp = temp<<1;
sck = 1;
_nop_();
sck = 0;
}
}
void sclduan(unsigned char num) //段码数据
{
unsigned char i,temp;
temp = tableduan[num];
for(i = 0;i<8;i++)
{
if(temp & 0x80)
{
si = 1;
}
else
{
si = 0;
}
_nop_();
temp = temp<<1;
sck = 1;
_nop_();
sck = 0;
}
}
void leddisplay(unsigned char duan,unsigned char wei) //每一位对应的数字
{
init();
sclduan(duan);
_nop_();
sclwei(wei);
_nop_();
rck = 1;
_nop_();
rck = 0;
_nop_();
}
void led_caculate(unsigned int numb) //输入数字判断计算显示
{
unsigned int gewei;
unsigned int shiwei;
unsigned int baiwei;
gewei = numb%10;
shiwei = numb/10%10;
baiwei = numb/100%10;
if(numb<10)
{
leddisplay(gewei,3);
delay1(50);
}
else if(numb>=10 && numb<100)
{
leddisplay(gewei,3);
delay1(10);
leddisplay(shiwei,2);
delay1(10);
}
else if(numb>= 100 && numb<1000)
{
leddisplay(gewei,3);
delay1(50);
leddisplay(shiwei,2);
delay1(50);
leddisplay(baiwei,1);
delay1(50);
}
}
void main()
{
unsigned int i;
while(1)
{
for(i = 0;i<30;i++)
{
led_caculate(i) ;
delay(200);
}
}
}
把delay()删掉亮度变均匀了,但是个位跑得飞快。稍微加一点延时 显示就闪。怎么能让数字跑慢点并且不闪呢?
追答void main()
{
unsigned int i, j; //加个变量j
while(1) {
for(i = 0; i < 30; i++) {
for(j = 0; j < 100; j++) led_caculate(i); //显示100遍,就慢了
// delay(200);----删除这句
}
}
}