找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助max7219点阵显示问题

[复制链接]
跳转到指定楼层
楼主
本人是单片机小白,在学习驱动max7219做个小时钟;请教下面图片中一个字符拆分开,在两块点阵屏上显示怎么做的,目前只会一个屏显示一个字符;
另外,中间那个冒号怎么显示?


这是网上找来的7219驱动程序,要怎么修改才能实现自己的需求

#include <reg52.h>  
#include <intrins.h>  
#define uchar unsigned char  
#define uint  unsigned int  
//定义Max7219端口  
sbit Max7219_pinCLK = P2^2;  
sbit Max7219_pinCS  = P2^1;  
sbit Max7219_pinDIN = P2^0;  
uchar code disp1[3][8]={  
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E}, //2
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0},    //3
{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8},   //4
};  
/*n毫秒的延时程序*/  
void Delay_xms(uint x)  
{  
uint i,j;  
for(i=0;i<x;i++)  
  for(j=0;j<112;j++);  
}  
//--------------------------------------------  
//向MAX7219(U3)写入字节  
void Write_Max7219_byte(uchar DATA)           
{  
        uchar i;      
        Max7219_pinCS=0;                //CS=0有效,CS=1锁存   
        for(i=8;i>=1;i--)  
          {         
            Max7219_pinCLK=0;  
            Max7219_pinDIN=DATA&0x80; //&10000000, 编译器对位操作的理解:非0即为1  
            DATA=DATA<<1;  
            Max7219_pinCLK=1;       //上升沿把数据送出去  
           }                                   
}  
//-------------------------------------------  
/*向M第一片MAX7219写入数据*/  
void Write_Max7219_1(uchar add1,uchar dat1)  
{   
     Max7219_pinCS=0;  
     Write_Max7219_byte(add1);           //写入地址,即数码管编号  
     Write_Max7219_byte(dat1);               //写入数据,即数码管显示数字   
     Max7219_pinCS=1;                          
}  
/*第二片MAX7219的写入数据*/  
void Write_Max7219_2(uchar add2,uchar dat2)  
{  
    Max7219_pinCS=0;  
    Write_Max7219_byte(add2);  
    Write_Max7219_byte(dat2);  
    Max7219_pinCLK=1;  
    Write_Max7219_byte(0x00);  //片1写入空  
    Write_Max7219_byte(0x00);  
    Max7219_pinCS=1;  
}  
/*第三片MAX7219的写入数据*/  
void Write_Max7219_3(uchar add3,uchar dat3)  
{  
    Max7219_pinCS=0;  
    Write_Max7219_byte(add3);  
    Write_Max7219_byte(dat3);  
    Max7219_pinCLK=1;  
    Write_Max7219_byte(0x00); //片1写入空  
    Write_Max7219_byte(0x00);  
    Write_Max7219_byte(0x00); //片2写入空  
    Write_Max7219_byte(0x00);  
    Max7219_pinCS=1;  
}  


/*初始化芯片*/  
void Init_MAX7219(void)  
{  
Write_Max7219_1(0x09, 0x00);       //译码方式:BCD码  
Write_Max7219_1(0x0a, 0x03);       //亮度   
Write_Max7219_1(0x0b, 0x07);       //扫描界限;8个数码管显示  
Write_Max7219_1(0x0c, 0x01);       //掉电模式:0,普通模式:1  
Write_Max7219_1(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0  

Write_Max7219_2(0x09, 0x00);       //译码方式:BCD码  
Write_Max7219_2(0x0a, 0x03);       //亮度   
Write_Max7219_2(0x0b, 0x07);       //扫描界限;8个数码管显示  
Write_Max7219_2(0x0c, 0x01);       //掉电模式:0,普通模式:1  
Write_Max7219_2(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0  

Write_Max7219_3(0x09, 0x00);       //译码方式:BCD码  
Write_Max7219_3(0x0a, 0x03);       //亮度   
Write_Max7219_3(0x0b, 0x07);       //扫描界限;8个数码管显示  
Write_Max7219_3(0x0c, 0x01);       //掉电模式:0,普通模式:1  
Write_Max7219_3(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0  
}  


/**********************主程序**************************/  
void main(void)  
{  
uchar i,j;  
Delay_xms(50);  
Init_MAX7219();   
while(1)  
{  
  for(j=0;j<3;j++)  
  {  
   for(i=1;i<9;i++)  
   {  
    Write_Max7219_1(i,disp1[2][i-1]);  
    Write_Max7219_2(i,disp1[3][i-1]);  
    Write_Max7219_3(i,disp1[4][i-1]);  
    }  
   Delay_xms(1000);  
  }   
}   
}

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

使用道具 举报

沙发
ID:123289 发表于 2018-4-3 00:52 | 只看该作者
你要现进行字符拆装分解组合,考的是你对扫描显示、以及对点阵真正理解。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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