找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

15W4K58S4單片機(jī)控制MAX7219數(shù)碼管就是沒反應(yīng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:381634 發(fā)表于 2018-8-23 10:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
15W4K58S4控制MAX7219數(shù)碼管就是沒反應(yīng),從網(wǎng)上沾的程序也不好使,求大佬蒞臨幫助
//***********************************************************************
//                        包含文件
#include <STC15W4K58S4.h>            // 引用標(biāo)準(zhǔn)庫(kù)的頭文件
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit DIN = P1^0;              //MAX7219串行數(shù)據(jù)輸入
sbit CLK = P1^1;              //MAX7219串行時(shí)鐘
sbit LOAD = P1^2;             //MAX7219顯示數(shù)據(jù)鎖存控制

#define NoOp   0x00           //空操作寄存器
#define Digit0 0x01           // 數(shù)碼管1寄存器
#define Digit1 0x02           // 數(shù)碼管2寄存器
#define Digit2 0x03           // 數(shù)碼管3寄存器
#define Digit3 0x04           // 數(shù)碼管4寄存器
#define Digit4 0x05           // 數(shù)碼管5寄存器
#define Digit5 0x06           // 數(shù)碼管6寄存器
#define Digit6 0x07           // 數(shù)碼管7寄存器
#define Digit7 0x08           // 數(shù)碼管8寄存器

#define DecodeMode 0x09       // 譯碼模式寄存器
#define Intensity 0x0a        // 亮度寄存器
#define ScanLimit 0x0b        // 掃描位數(shù)寄存器
#define ShutDown 0x0c         // 低功耗模式寄存器

#define DisplayTest 0x0f      // 顯示測(cè)試寄存器
#define ShutdownMode 0x00     // 低功耗方式
#define NormalOperation 0x01  // 正常操作方式
#define ScanDigit 0x07        // 掃描位數(shù)設(shè)置,顯示8位數(shù)碼管
#define DecodeDigit 0xff      // 譯碼設(shè)置,8位均為BCD碼
#define IntensityGrade 0x0a   // 亮度級(jí)別設(shè)置
#define TestMode 0x01         // 顯示測(cè)試模式
#define TextEnd 0x00          // 顯示測(cè)試結(jié)束,恢復(fù)正常工作模式



uchar DisBuffer[8]={0,0,0,0,0,0,0,0};    // 顯示緩存區(qū)

//****************控制MAX7219函數(shù)聲明********************
void delay(uint t);//毫秒延時(shí)基準(zhǔn)程序
void SendChar(uchar ch);//向MAX7219寫入一字節(jié)數(shù)據(jù)
void WriteWord(uchar addr,uchar num);//向MAX7219寫一字的數(shù)據(jù)
void InitDisplay(void);//MAX7219初始化設(shè)置

/* 主函數(shù) */

void main(void)

{
    InitDisplay (); // MAX7219初始化
    WriteWord(DisplayTest,TestMode);  // 開始顯示測(cè)試,點(diǎn)亮所有LED
    delay(1500);                      // 延時(shí)約1.5s
    WriteWord (DisplayTest,TextEnd);  // 退出顯示測(cè)試模式
    WriteWord (Digit0,0);
    WriteWord (Digit1,1);
    WriteWord (Digit2,2);
    WriteWord (Digit3,3);
    WriteWord (Digit4,4);
    WriteWord (Digit5,5);
    WriteWord (Digit6,6);
    WriteWord (Digit7,7);
    while(1);
}
//*********************** MAX7219初始化 ******************
void InitDisplay (void)
{
                P2M1 &=~( (1<<5) | (1<<6) | (1<<7));  
          P2M0 &=~( (1<<5) | (1<<6) | (1<<7));
    WriteWord (ScanLimit,ScanDigit);         // 設(shè)置掃描界限
    WriteWord (DecodeMode,DecodeDigit);      // 設(shè)置譯碼模式
    WriteWord (Intensity,IntensityGrade);    // 設(shè)置亮度
    WriteWord (ShutDown,NormalOperation);    // 設(shè)置為正常工作模式

}
//**************向MAX7219寫入字(16位)*****************************
void WriteWord (uchar addr,uchar num)
{
    LOAD=0;
    _nop_();
    SendChar(addr);
    _nop_();
    SendChar(num);
    _nop_();
    LOAD=1;                            // 鎖存進(jìn)相應(yīng)寄存器
}
//*************向MAX7219寫入字節(jié)(8位)********************
void SendChar (uchar ch)
{
    uchar i,temp;
    _nop_();
    for (i=0;i<8;i++)
    {
         temp=ch&0x80;
         ch=ch<<1;
         if(temp)
         {
            DIN=1;
            CLK=0;
            CLK=1;
         }
         else
         {
            DIN=0;
            CLK=0;
            CLK=1;
         }
    }
}
//******************延時(shí)t毫秒**************************************
void delay(uint t)
{
       uint i;
       while(t--)
       {
              /* 對(duì)于12M時(shí)鐘,約延時(shí)1ms */
              for (i=0;i<125;i++)
              {}
       }
}

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表