#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;
}
}
|