#include "reg52.h" //此檔案中定義了微控制器的一些特殊功能暫存器
typedef unsigned int u16; //對資料型別進行宣告定義
typedef unsigned char u8;
sbit lsa=p2^2;
sbit lsb=p2^3;
sbit lsc=p2^4;
sbit led1=p2^0;
sbit led2=p2^1;
sbit led6=p2^5;
sbit led7=p2^6;
sbit led8=p2^7;
sbit beep=p1^5;
int tt,time;
u8 codesmgduan[17]=;
//延時函式,i=1時,大約延時10us
void delay(u16 i)
while(i--);
* 函 數 名 : digdisplay
* 函式功能 : 數碼管動態掃瞄函式,迴圈掃瞄8個數碼管顯示
void digdisplay()
u8i;
for(i=0;i<8;i++)
switch(i) //位選,選擇點亮的數碼管,
case(0):
lsa=0;lsb=0;lsc=0;p0=smgduan[time%10];break;//顯示第0位
case(1):
lsa=1;lsb=0;lsc=0;p0=smgduan[time/10];break;//顯示第1位
case(2):
lsa=0;lsb=1;lsc=0;p0=smgduan[time/100];break;//顯示第2位
case(3):
lsa=1;lsb=1;lsc=0;p0=smgduan[0];break;//顯示第3位
case(4):
lsa=0;lsb=0;lsc=1;p0=smgduan[0];break;//顯示第4位
case(5):
lsa=1;lsb=0;lsc=1;p0=smgduan[1];break;//顯示第5位
case(6):
lsa=0;lsb=1;lsc=1;p0=smgduan[6];break;//顯示第6位
case(7):
lsa=1;lsb=1;lsc=1;p0=smgduan[1];break;//顯示第7位
delay(80);
p0=0x00;//消隱
void fm1()
beep=~beep; //取反 高低電平不斷轉換
delay(200); //改變頻率,以改變音色500hz
void fm2()
beep=~beep; //取反 高低電平不斷轉換
delay(1000); //改變頻率,以改變音色100hz
void init() ;
void main()
u8 j=0;
u8 aa=0;
u8 k=0;
init();
while(1)
digdisplay(); //數碼管顯示函式
if(time==99)
p0=0;
p2=0;
for(k=0;k<60;k++)
beep=~beep; //取反高低電平不斷轉換
delay(200); //改變頻率,以改變音色500hz
delay(100000);
for(k=0;k<60;k++)
beep=~beep; //取反高低電平不斷轉換
delay(1000); //改變頻率,以改變音色100hz
while(1);
void init()
p0=0;
p2=0;
time=0;
tt=0;
tmod=0x11;
th0=(65536-50000)/256; //定時器裝初值50ms
tl0=(65536-50000)%256;
ea=1;//開總中斷
et0=1;//開定時器0中斷
tr0=1;//啟動定時器0;使tr0置位=1,定時器0開始計數;停止時,使tr0=0復位;
void timer0() interrupt 1
static int j=0;
static u8 aa=0;
u8 k=0;
th0 =(65536-50000)/256;// 0x4c; //晶振11.0592mhz
tl0 = (65536-50000)%256;//0x00; //若用12mhz晶振 則改為th0=0x3c;tl0=0xb0;
tt++;
if(tt == 1)
time++;
// if(time==100) //到99後在從00開始
// time= 0;
tt = 0;
if(time<100)
if(aa==20)
switch(j)
case0:
led1=0;led2=1;led6=1;led7=1;led8=1;break;
case1:
led1=1;led2=0;led6=1;led7=1;led8=1;break;
case2:
led1=1;led2=1;led6=0;led7=1;led8=1;break;
case3:
led1=1;led2=1;led6=1;led7=0;led8=1;break;
case4:
led1=1;led2=1;led6=1;led7=1;led8=0;break;
case5:
led1=1;led2=1;led6=1;led7=0;led8=1;break;
case6:
led1=1;led2=1;led6=0;led7=1;led8=1;break;
case7:
led1=1;led2=0;led6=1;led7=1;led8=1;break;
case8:
led1=0;led2=1;led6=1;led7=1;led8=1;j=-1;break;
default:break;
j++;
aa=0;
//delay(5000);
else
aa++;
else
led1=1;led2=1;led6=1;led7=1;led8=1;
lsa=1;lsb=1;lsc=1;
//void timer1() interrupt 3
// u8 j=0;
// th1 = 0x4c; //晶振11.0592mhz
// tl1 = 0x00; //若用12mhz晶振 則改為th0=0x3c;tl0=0xb0;
// delay(500);
// for(j=0;j<5;j++)
// switch(j)
// case0:
// led1=0;led2=1;led6=1;led7=1;led8=1;break;
// case1:
// led1=1;led2=0;led6=1;led7=1;led8=1;break;
// case2:
// led1=1;led2=1;led6=0;led7=1;led8=1;break;
// case3:
// led1=1;led2=1;led6=1;led7=0;led8=1;break;
// case4:
// led1=1;led2=1;led6=1;led7=1;led8=0;break;
// delay(5000);
數碼管流水燈
使用stc89c52晶元p2.0 p2.7分別控制8位數碼管,p0.0 p0.7分別控制各位數碼管 共陽極 a b c d e f g h。使用該電路圖分別以下功能 按下k18 p1.4口低電平控制 一次全部數碼管自動顯示數字從0到9 迴圈 兩次全部數碼管自動顯示數字從9到0 迴圈 按下k19 p1...
流水燈 數碼管 定時器中斷
利用動態掃瞄和定時器1在數碼管上顯示出從765432開始以1 10秒的速度往下遞減直至765398並保持顯示此數,與此同時利用定時器0以500ms速度進行流水燈從上至下移動,當數碼管上數減到停止時,實驗板上流水燈也停止然後全部開始閃爍,3秒後 用t0定時 流水燈全部關閉 數碼管上顯示出 hello ...
51微控制器用中斷實現流水燈,數碼管和點陣同時顯示
小白自備筆記 數碼管1s左移,6位數碼管從999999每一秒鐘減一倒著計數,點陣9 0倒計時顯示。include 標頭檔案 include 庫函式標頭檔案 define uint unsigned int 巨集定義 define uchar unsigned char define ulong un...