找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1619|回復: 0
打印 上一主題 下一主題
收起左側(cè)

單片機LED點陣流動程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:979573 發(fā)表于 2022-1-16 18:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <STC89C5xRC.H>
#include "intrins.h"
sbit RCK=P3^5;                //RCLK
sbit SCK=P3^6;                //SRCLK
sbit SER=P3^4;    //SER
sbit k1=P3^1;
typedef unsigned int u16;
typedef unsigned char u8;

unsigned char code Animation[]={
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,
        0xA8,0xA8,0xA8,0xFF,0x00,0x00,0x1E,0x32,
  0x4A,0x8E,0x00,0x00,0x7E,0x52,0x52,0x7E,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char code day[]={
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x22,0x46,0x8A,0x92,0x62,0x00,0x00,0xFE,
        0x82,0x82,0x82,0xFE,0x00,0x00,0x22,0x46,
  0x8A,0x92,0x62,0x00,0x00,0x22,0x46,0x8A,
        0x92,0x62,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay(unsigned int xms)
{
        unsigned char i;
        while(xms--)
        {
        
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        }
}
void _74H595(u8 bate)
{
        u8 i;
        RCK=0;
        SCK=0;
        
        for(i=0;i<8;i++)
        {
                SER=bate>>7;
                bate=bate<<1;
                SCK=1;
                SCK=0;
        }
        RCK=1;
        RCK=0;
}
void worite(u8 Colum,Data)
{
        _74H595(Data);
        P0=~(0x80>>Colum);
        delay(1);
        P0=0xFF;
}
void main()
{
        u8 i,offset=0,count=0;
        u8 k=0;
        while(1)
        {
                if(k1==0)
                {
                        delay(20);
                        while(!k1);
                        k=!k;
                }
         if(k==0)
        {
                for(i=0;i<20;i++)
                {
                    worite(i,Animation[i+offset]);
                        if(k1==0)break;
                }
                count++;
                if(count>10)
                {
                        count=0;
                        offset++;
                        if(offset>30)
                        {
                                offset=0;
                        }
                }
        }
        else if(k==1)
        {
                for(i=0;i<20;i++)
                {
                    worite(i,day[i+offset]);
                        if(k1==0)break;
                }
                count++;
                if(count>10)
                {
                        count=0;
                        offset++;
                        if(offset>30)
                        {
                                offset=0;
                        }
                }
        }
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表