單片機流水燈顯示方式

對於單片機的顯示方式有很多種:閃爍,交替,流水燈等等。但今天我做的就是流水燈,但實際上所用的代碼都差不多,只有把顯示方式的子程序改一下即可。我用到的語言是C語言,而且是用鍵盤控制的。
只要把相應的電平變爲低電平就可以了;相反,如果要接LED熄滅,就要把相應的電平變爲高電平;同理,接在P1.1~P1. 7口的其他7個LED的點亮和熄滅的方法同LED1。因此,要實現流水燈功能,我們只要將發光二極管LED1~LED8依次點亮、熄滅,8只LED燈便會一亮一暗的做流水燈了。同樣的道理,可以讓8個燈左移顯示方式,右移顯示方式,開幕式顯示方式。

在此我們還應注意一點,由於人眼的視覺暫留效應以及單片機執行每條指令的時間很短,我們在控制二極管亮滅的時候應該延時一段時間,否則我們就看不到“流水”效果了。
代碼:

#include<reg52.h>

#include<absacc.h>

#include<intrins.h>

#define COM8255
XBYTE[0xF003]

#define PA8255
XBYTE[0XF000]

#define PB8255
XBYTE[0xF001]

#define PC8255 XBYTE[0xF002]

#define uchar
unsigned char

#define u8
unsigned char

code const u8
SegArray1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //左移方式

code const u8
SegArray3[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //右移方式

code const u8 SegArray2[]={0xe7,0xdb,0xbd,0x7e}; //開幕式方式

static unsigned char n,m=1;

unsigned char
key_read(void); //函數聲明

void delay( uchar
a) //延時函數

{

   uchar z;

   while(a--)

for(z=0;z<120;z++);

}

u8 AllKey()

{ PB8255 = 0x0; //全“0”->掃描口

   return ~PC8255 & 0x3;       //讀鍵狀態,取低二位

}

u8 keyi() //控制鍵盤的函數

{ u8 i,j;

          if (AllKey() == 0)            //調用判有無閉合鍵子程序

          { 

                 return 0xff;

          }

          i

= 0xfe;

          j = 0;

          while(i != 0xff)

          { 

                 PB8255 = i;

                 if ((PC8255 & 0x1) ==
  1.    //0行有鍵閉合
    
                  { 
    
                  break;
    
                  }
    
                  else if ((PC8255 & 0x2)
    

== 0) //1行有鍵閉合

                 { 

                 j += 8;

                 break;

                 }

                 j++;           //列計數器+1

                 i = ((i<<1) | 1); 

          }

             if

(i == 0xff)

      return 0xff;

             return

j; //鍵號

}

void main()

{

u8
i;

COM8255=0x89;

while(1)

{

n=keyi();

if(n!=0xff)

m=n;

switch(m)

{

    case

0x01: //左移方式

{

PA8255=SegArray1[i];

     i++;

if(i>7)

             i=0;

delay(200);

} break;

  case

0x02: //右移方式

{

PA8255=SegArray3[i];

     i++;

if(i>7)

             i=0;

delay(200);

} break;

case 0x03: //閉幕式方式

{

PA8255=SegArray2[i];

     i++;

if(i>3)

             i=0;

delay(200);

} break;

    }

}

}

連接實圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章