找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+MAX7219驱动数码管0-9循环显示显示,含源码,Proteus电路图

[复制链接]
跳转到指定楼层
楼主
电子专业设计
51单片机+MAX7219做数码管显示,8位数码管,0-9循环显示
附件内有protues仿真电路和源码

MAX7219是美国MAXIM(美信)公司生产的串行输入/输出共阴极显示驱动器。它采用了3线串行接口,传送速率达10M数据,能驱动8位七段数字型LED或条形显示器或64只独立的LED。MAX7219内置BCD码译码器、多路扫描电路、段和数字驱动器和存储每一位的8*8静态RAM。能方便的用模拟或数字方法控制段电流的大小,改变显示器的数量;能进入低功耗的关断模式(仅消耗150uA电流,数据保留);能方便地进行级联。可广泛用于条形图显示、七段显示、工业控制、仪器仪表面板等领域。而且其最重要的一点是,每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单且灵活。MAX719后缀表示其封装方式和工作温度,如表所示:


单片机源程序如下:
  1. /**********************************************************************/
  2. #include <reg52.h>
  3. #include <stdio.h>
  4. #define uchar unsigned char

  5. void delayms(unsigned int ms);
  6. /************************************************************************
  7.                               I/O定义
  8. *************************************************************************/
  9. sbit DIN=P0^0;//数据输入端           
  10. sbit LOAD=P0^1;//地址锁存端
  11. sbit CLK=P0^2; //时钟输入端
  12. sbit P2_0=P2^0;
  13. sbit P2_1=P2^1;
  14. sbit P2_2=P2^2;
  15. sbit P2_5=P2^5;
  16. sbit P2_6=P2^6;
  17. sbit P2_7=P2^7;
  18. /************************************************************************
  19.                               数据输入
  20. *************************************************************************/
  21. void send(uchar add,uchar dat)
  22. {
  23.         uchar ADS,i,j;
  24.         CLK=0;
  25.         LOAD=0;
  26.         DIN=0;
  27.         i=4;
  28.         while(i<16)
  29.         {
  30.                 if(i<8)
  31.                 {
  32.                         ADS=add;
  33.                 }
  34.                 else
  35.                 {
  36.                         ADS=dat;
  37.                 }
  38.                 for(j=8;j>=1;j--)
  39.                 {
  40.                         if((ADS&0x80)==0)
  41.                         {     
  42.                                 DIN=0 ;
  43.                         }
  44.                         else
  45.                         {     
  46.                                 DIN=1;
  47.                         }
  48.                         ADS=ADS<<1;
  49.                         CLK=1;         
  50.                         CLK=0;
  51.                 }
  52.                 i=i+8;
  53.         }
  54.         LOAD=1;
  55. }

  56. /************************************************************************
  57.                                主函数
  58. *************************************************************************/

  59. void main(void)
  60. {
  61.         uchar d=0;
  62.         
  63.         send(0x0c,0x01);//正常状态

  64.         send(0x0b,0x07);//设置扫描范围DIG0-7

  65.         send(0x0a,0x05);//设置亮度11/32

  66.         send(0x09,0xff);//采用译码方式

  67.         while(1)
  68.         {         
  69.                 for(d=0;d<10;d++)
  70.                 {
  71.                         switch(d)
  72.                         {
  73.                                 case 0:send(0x01,0x00);send(0x02,0x01);send(0x03,0x02);send(0x04,0x03);send(0x05,0x04);send(0x06,0x05);send(0x07,0x06);send(0x08,0x07);break;
  74.                                 case 1:send(0x01,0x01);send(0x02,0x02);send(0x03,0x03);send(0x04,0x04);send(0x05,0x05);send(0x06,0x06);send(0x07,0x07);send(0x08,0x08);break;
  75.                                 case 2:send(0x01,0x02);send(0x02,0x03);send(0x03,0x04);send(0x04,0x05);send(0x05,0x06);send(0x06,0x07);send(0x07,0x08);send(0x08,0x09);break;
  76.                                 case 3:send(0x01,0x03);send(0x02,0x04);send(0x03,0x05);send(0x04,0x06);send(0x05,0x07);send(0x06,0x08);send(0x07,0x09);send(0x08,0x00);break;
  77.                                 case 4:send(0x01,0x04);send(0x02,0x05);send(0x03,0x06);send(0x04,0x07);send(0x05,0x08);send(0x06,0x09);send(0x07,0x00);send(0x08,0x01);break;
  78.                                 case 5:send(0x01,0x05);send(0x02,0x06);send(0x03,0x07);send(0x04,0x08);send(0x05,0x09);send(0x06,0x00);send(0x07,0x01);send(0x08,0x02);break;
  79.                                 case 6:send(0x01,0x06);send(0x02,0x07);send(0x03,0x08);send(0x04,0x09);send(0x05,0x00);send(0x06,0x01);send(0x07,0x02);send(0x08,0x03);break;
  80.                                 case 7:send(0x01,0x07);send(0x02,0x08);send(0x03,0x09);send(0x04,0x00);send(0x05,0x01);send(0x06,0x02);send(0x07,0x03);send(0x08,0x04);break;
  81.                                 case 8:send(0x01,0x08);send(0x02,0x09);send(0x03,0x00);send(0x04,0x01);send(0x05,0x02);send(0x06,0x03);send(0x07,0x04);send(0x08,0x05);break;
  82.                                 case 9:send(0x01,0x09);send(0x02,0x00);send(0x03,0x01);send(0x04,0x02);send(0x05,0x03);send(0x06,0x04);send(0x07,0x05);send(0x08,0x06);break;
  83.                                 default:send(0x01,0x00);send(0x02,0x00);send(0x03,0x00);send(0x04,0x00);send(0x05,0x00);send(0x06,0x00);send(0x07,0x00);send(0x08,0x00);break;
  84.                         }
  85.                         delayms(1000);
  86. //                        send(0x01,0x00);send(0x02,0x02);
  87. //                        send(0x01,0x04);send(0x02,0x07);
  88. //                        send(0x01,0x08);send(0x02,0x05);
  89.                 }
  90.         }
  91. }

  92. void delayms(unsigned int ms)
  93. {
  94.         unsigned int i,j;
  95.         for(j=0;j<ms;j++)
  96.                 for(i=0;i<115;i++);
  97. }
复制代码


所有资料51hei提供下载:
MAX7219应用.zip (320.77 KB, 下载次数: 30)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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