找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MAX7221 LED显示驱动器单片机原理图和程序

[复制链接]
跳转到指定楼层
楼主


  1. //利用数码管驱动芯片max7221实现8位数码管显示
  2. #include <reg51.h>
  3. #include <intrins.h>

  4. sbit DIN = P2^0;     //数据串出引脚
  5. sbit CS = P2^1;     //片选端
  6. sbit CLK = P2^2;    //移位时钟端

  7. unsigned char disp_buff[8] = {2,0,1,0,10,2,10,9}; //显示的数字,数值为10的时候,显示“-”

  8. // 延时函数
  9. void delayms(unsigned int x)
  10. {
  11.   unsigned char i;
  12. while(x--)
  13. {
  14.    for(i = 0;i < 120;i++);
  15. }
  16. }

  17. //写数据函数
  18. void write_data(unsigned char addr,unsigned char dat)
  19. {
  20.   unsigned char i;
  21. CS = 0;        // 先写地址,片选置低,串行数据加载到移位寄存器
  22. for(i = 0;i < 8;i++)   //
  23. {
  24.    CLK = 0;     //时钟上升沿数据移入内部移位寄存器
  25.   addr <<= 1;    //待发送的地址,每次左移一次,高位在前发送,
  26.   DIN = CY;    //数据移位后,如果有溢出,则可以从进位位CY中获得溢出的数据位
  27.   CLK = 1;
  28.   _nop_();
  29.   _nop_();
  30.   CLK = 0;    //下降沿时数据从DOUT移出
  31. }
  32. for(i = 0;i < 8;i++)
  33. {
  34.    CLK = 0;   //
  35.   dat <<= 1;   //发送数据
  36.   DIN = CY;
  37.   CLK = 1;
  38.   _nop_();
  39.   _nop_();
  40.   CLK = 0;
  41. }
  42. CS = 1;      //CS上升沿,数据锁存
  43. }

  44. //初始化函数
  45. void init_max7221(void)
  46. {
  47. write_data(0x09,0xff);    //编码模式
  48. write_data(0x0a,0x07);    //亮度控制
  49. write_data(0x0b,0x07);    //扫描数码管的位数
  50. write_data(0x0c,0x01);    //工作模式
  51. }

  52. void main(void)
  53. {
  54.   unsigned char i;
  55. init_max7221();    // 初始化
  56. delayms(2);
  57. for(i = 0;i < 8;i++)
  58. {
  59.    write_data(i+1,disp_buff[i]);   // 显示8位
  60. }
  61. while(1);
  62. }

复制代码



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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