找回密码
 立即注册

QQ登录

只需一步,快速开始

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

max7219驱动数码管单片机程序,能不能再简单点,求指教

[复制链接]
跳转到指定楼层
楼主
ID:836924 发表于 2020-11-25 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这样能不能简写感觉太长了
#include <reg52.h>
#include <intrins.h>         
sbit DIN_7219=P0^5;   //7219串行数据输入端
sbit LOAD_7219=P0^6;   //7219数据锁存端
sbit CLK_7219=P0^7;   //7219时钟输入端
#define uchar unsigned char
uchar code LEDcode[]=
{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00     /*0,1,2,3,4,5,6,7,8,9,全灭*/
  /*0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff,*/   };    /*A,B,C,D,E,F,P,U,全亮*/
void write_7219_byte (uchar dat)
{
uchar i,temp;
for (i=0;i<8;i++)
   {
       temp=dat&0x80;
       dat=dat<<1;
       if(temp)
          DIN_7219=1;   
       else
          DIN_7219=0;
    CLK_7219=0;
    _nop_();
       CLK_7219=1;  //时钟上升沿把数据送入寄存器锁定  
   }
}
void write_7219 (uchar addr,uchar dat)
{
LOAD_7219=0;     //寄存器打开,等待数据的送入
_nop_();
write_7219_byte (addr);   //选择寄存器地址
_nop_();
write_7219_byte (dat);    //选择让芯片执行什么命令
_nop_();
LOAD_7219=1; //第16个上升沿之后,第17个上升沿之前必须把pinCLK置高,否则数据丢失
}
/**************************************************
*                MAX7219初始化       *
***************************************************/
void init_7219 (void)
   {
     write_7219 (0x0c,0x01);     /*  设置电源工作模式            */
     write_7219 (0x0a,0x02);     /*  设置亮度(19/32,根据需要增减)*/
     write_7219 (0x0b,0x03);     /*  设置扫描界限(根据需要增减)  */
     write_7219 (0x09,0x00);     /*  设置译码模式(00不译,FF译)    */
  write_7219 (0x0f,0x00);     /*  显示测试(00为正常工作状态)  */
   }
/**************************************************
*                MAX7219清除显示      *
***************************************************/
void clear_7219(void)
{
uchar i;       //变量i,用来选择数码管位选
for(i=8;i>0;i--)     //i自减,选择完所有的8位
{
  write_7219(i,0x00);  //对应位选的段全部清除显示
}
}
void main(void)
{
    init_7219 ();          //MAX7219初始化
clear_7219();   //MAX7219清除显示,免去干扰
    while(1)   
  {  
   write_7219(0x01,LEDcode[5]);      //扫描第一位(LSB),并送段码显示
   write_7219(0x02,LEDcode[5]|0x80); //扫描第二位,并送段码显示,同时加显小数点2|  0x80 如果不加小数点就去掉|0x80
   write_7219(0x03,LEDcode[5]);      //扫描第三位,并送段码显示
   write_7219(0x04,LEDcode[5]);   //扫描第四位,并送段码显示
   write_7219(0x05,LEDcode[5]);   //扫描第五位,并送段码显示
   write_7219(0x06,LEDcode[6]);   //扫描第六位,并送段码显示  
   write_7219(0x07,LEDcode[7]);   //扫描第七位,并送段码显示
   write_7219(0x08,LEDcode[8]);   //扫描第八位(MSB),并送段码显示
  }   
}

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

使用道具 举报

沙发
ID:235200 发表于 2020-11-25 22:30 | 只看该作者
这是最简单的了,而且条理清楚,再改的话估计会读不懂了
回复

使用道具 举报

板凳
ID:420836 发表于 2020-11-26 04:21 | 只看该作者
我觉得它已经简化了。
回复

使用道具 举报

地板
ID:836924 发表于 2020-11-26 19:05 | 只看该作者
csmyldl 发表于 2020-11-25 22:30
这是最简单的了,而且条理清楚,再改的话估计会读不懂了

好的,谢谢
回复

使用道具 举报

5#
ID:849801 发表于 2020-11-26 19:11 | 只看该作者
你可以把寄存器那部分简化一些
回复

使用道具 举报

6#
ID:748788 发表于 2020-11-26 19:40 | 只看该作者
一种简化的方法是,将main函数之前的4个函数做出头文件。这样可以使主程序更简洁。
回复

使用道具 举报

7#
ID:848242 发表于 2020-11-27 08:19 | 只看该作者
一种简化的方法是,将main函数之前的4个函数做出头文件。这样可以使主程序更简洁。
回复

使用道具 举报

8#
ID:848824 发表于 2020-11-27 15:19 | 只看该作者
怎么和18B20,合一起显示温度啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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