找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1544|回复: 0
打印 上一主题 下一主题
收起左侧

15W4K58S4单片机控制MAX7219数码管就是没反应

[复制链接]
跳转到指定楼层
楼主
ID:381634 发表于 2018-8-23 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
15W4K58S4控制MAX7219数码管就是没反应,从网上沾的程序也不好使,求大佬莅临帮助
//***********************************************************************
//                        包含文件
#include <STC15W4K58S4.h>            // 引用标准库的头文件
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit DIN = P1^0;              //MAX7219串行数据输入
sbit CLK = P1^1;              //MAX7219串行时钟
sbit LOAD = P1^2;             //MAX7219显示数据锁存控制

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

#define DecodeMode 0x09       // 译码模式寄存器
#define Intensity 0x0a        // 亮度寄存器
#define ScanLimit 0x0b        // 扫描位数寄存器
#define ShutDown 0x0c         // 低功耗模式寄存器

#define DisplayTest 0x0f      // 显示测试寄存器
#define ShutdownMode 0x00     // 低功耗方式
#define NormalOperation 0x01  // 正常操作方式
#define ScanDigit 0x07        // 扫描位数设置,显示8位数码管
#define DecodeDigit 0xff      // 译码设置,8位均为BCD码
#define IntensityGrade 0x0a   // 亮度级别设置
#define TestMode 0x01         // 显示测试模式
#define TextEnd 0x00          // 显示测试结束,恢复正常工作模式



uchar DisBuffer[8]={0,0,0,0,0,0,0,0};    // 显示缓存区

//****************控制MAX7219函数声明********************
void delay(uint t);//毫秒延时基准程序
void SendChar(uchar ch);//向MAX7219写入一字节数据
void WriteWord(uchar addr,uchar num);//向MAX7219写一字的数据
void InitDisplay(void);//MAX7219初始化设置

/* 主函数 */

void main(void)

{
    InitDisplay (); // MAX7219初始化
    WriteWord(DisplayTest,TestMode);  // 开始显示测试,点亮所有LED
    delay(1500);                      // 延时约1.5s
    WriteWord (DisplayTest,TextEnd);  // 退出显示测试模式
    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);         // 设置扫描界限
    WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式
    WriteWord (Intensity,IntensityGrade);    // 设置亮度
    WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式

}
//**************向MAX7219写入字(16位)*****************************
void WriteWord (uchar addr,uchar num)
{
    LOAD=0;
    _nop_();
    SendChar(addr);
    _nop_();
    SendChar(num);
    _nop_();
    LOAD=1;                            // 锁存进相应寄存器
}
//*************向MAX7219写入字节(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;
         }
    }
}
//******************延时t毫秒**************************************
void delay(uint t)
{
       uint i;
       while(t--)
       {
              /* 对于12M时钟,约延时1ms */
              for (i=0;i<125;i++)
              {}
       }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表