數碼管逐次加一同時流水燈

2021-08-08 23:18:31 字數 4230 閱讀 8091

#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...