#include<reg52.h> //头文件,没啥好说的。
#define uint unsigned int //程序中用uint代替unsigned int,简化定义无符号整数型变量
void delay7ms(void) //误差 -0.217013888891us //延时函数,这个根据晶振计算,他这个误差不一定就准确。
{
unsigned char a,b;
for(b=208;b>0;b--)
for(a=14;a>0;a--);
}
void delay2ms(void) //误差 -0.217013888889us //一样的延时函数,至于怎么延时,就是看下边的那个循环,计算a-十次,b-1次,就这样进行80次a-1减十次,也就是让CPU完成800次计算来打发时间,上边的一样,VIOD在具体使用中会换成整数值,与那800次相乘就是浪费的总共时间---延时。
{
unsigned char a,b;
for(b=80;b>0;b--)
for(a=10;a>0;a--);
}
void main(void) //主函数,程序从此开始。
{
uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //做一个名字为led的数据表[10]表示这个表里总共有十个元素,确定里边元素的序号。第一个元素为0XC0 表示输出的时候PIO输出的1 1 0 0 0 0 0 0,依次。
uint m,n=0,a=0; // 定义m , n , a ,三个无符号整数型变量,且n,a初始值为0
for(m=0;m<=10;m++) //m初始值为0,进行自加运算,和下边那句M==10 M=0那段一起表示,初始为0 依次+1,加到10了归0,也就是m从0--1.
{
while(a<30)
{
if(m==10)
{
m=0;
n++ ;
if(n==10)
n=0;
}
P0=led[m]; //P0口依次取uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 表里的十个数据,
P2=0x40; //P2口电平状况为 0 1 0 0 0 0 0 0 P2^6=1;
delay7ms(); //延时
P2=0x00; //P2口电平全部为0
delay2ms(); //延时
P0=led[n]; //P0口依次取uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 表里的十个数据,因为N也是从0--10,他是在M到10后开始从1开始数,也就是M显示完了开始显示N的数。
P2=0x80; //P2口电平为1 0 0 0 0 0 0 0 P2^7=1;
delay7ms(); //延时
P2=0x00; //P2口全部置0.
delay2ms(); //延时
a++; //a自加,这个变量定义的a最大值是30,所以,上边的显示循环30次 while(1)
}
a=0;
}
}
|