#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit pw=P1^4;//發光管的使能端 sbit wei=P2^7;//數碼管的位選端 sbit duan=P2^6;//數碼管的段選端 uchar temp,aa,num; // uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//數碼管數顯編碼表 void delay(uint z);//延時
void main() { pw=0; //開啟發光管使能端 num=0; //附于初始值為0 aa=0; //附于始值為0 TMOD=0X01; //設定計時/計數器模式控制暫存器值 TH0=(65536-50000)/256; //中斷初值,高8位 TL0=(65536-50000)%256; //中斷初值,低8位 EA=1; //開啟總中斷 ET0=1; //開啟定時中斷 TR0=1; //啟動定時 temp=0xfe; //附值發光管第一個燈亮11111110 P0=temp; duan=1; //開啟段選 P0=table[0]; //段選顯示數值初值為0 duan=0; //關閉段選,鎖存 wei=1; //讓位選處于直通狀態 P0=0x100; //位選位數值,數碼管位數,二制為100000000,0的才能亮,這樣八個數碼管都亮 wei=0; //鎖存,保持上一步的狀態 while(1) //死循環下級程序. { delay(1000); //流水燈速度 temp=_crol_(temp,1); //向左移位 P0=temp; }
} void delay(uint z) //流水燈延時函數 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);
} void timer0() interrupt 1 //中斷函數 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; if(aa==20) //數顯速度 { aa=0; num++; if(num==16) //數顯值到最高位F時返回初值0; num=0; duan=1; P0=table[num]; duan=0; } } |