MAX7219数码管驱动 IO口驱动详解 (ANBOZ)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TECDSN/article/details/53426525

简单介绍:

MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。。它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。

接口类型:

三线串行接口 兼容SPI 传输速率可达 10MHZ

功能介绍

1.多种译码方式和译码位
2.支持多片7219串联
3.支持亮度调节
4.支持扫描范围

MAX7219的外部管脚图

这里写图片描述

典型电路

这里写图片描述

电器特性

这里写图片描述

数据传输方式

这里写图片描述
(高位在前 先传地址 后传数据)

功能寄存器

1. 译码控制寄存器 地址码 0x09
MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式
2. 亮度控制寄存器 地址码 0x0a
共有16级可选择,用于设置LED的显示亮度,数据从0xX0~0xXF
3. 扫描界限寄存器 地址码 0x0b
此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED 0~5显示
4. 关断模式寄存器 地址码 0x0c
共有两种模式选择,一是关断状态,(最低位 D0=0)一是正常工作状态(D0=1)
5. 测试控制寄存器 地址码 0x0f
用于设置LED是测试状态还是正常工作状态,当测试状态时(最低位 D0=1)各位显示全亮,正常工作状态(D0=0)。 各寄存器具体操作见驱动程序详解

展开阅读全文

IO口流驱动

08-26

输出引脚合适,读引脚去读不进来,(输入输出用的是不同的引脚)!rn下面是读端口的流驱动:rnDWORD GPI_Read(DWORD dwData, LPVOID pBuf, DWORD Len)rnrn BYTE* pdatabuf;rn BYTE gpioNum;rn BYTE gpioState;rn pdatabuf = (BYTE*)pBuf;rn gpioState= *pdatabuf ;rn gpioNum = *pdatabuf++;rn RETAILMSG(1,(TEXT("*****GPILED: GPI_Read\r\n")));rn if(gpioNum == 0 || gpioNum == 1 || gpioNum == 2|| gpioNum == 3)rn rn *pdatabuf =(v_pIOPregs->GPFDAT & (1<GPBCON &= ~(1<<(14));//00 inputrn v_pIOPregs->GPBCON &= ~(1<<(15));rn v_pIOPregs->GPBUP &= ~(1<< 7); rn rn if(v_pIOPregs->GPBDAT & ( 1 <<7))rn gpioState = 1;rn elsern gpioState = 0;rnrn RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));rnrn rn //--------------PB9----13----read single -----in 1---rn if(gpioNum == 13) rn rn v_pIOPregs->GPBCON &= ~(1<<(18));rn v_pIOPregs->GPBCON &= ~(1<<(19));rn v_pIOPregs->GPBUP &= ~(1<<9); rn rn if(v_pIOPregs->GPBDAT & ( 1 <<9))rn gpioState = 1;rn elsern gpioState = 0;rn RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));rnrn rn rn //---------PE11--------14-----read single------in 2---------rn if(gpioNum == 14) rn rn v_pIOPregs->GPECON &= ~(1<<(22));rn v_pIOPregs->GPECON &= ~(1<<(23));rn v_pIOPregs->GPEUP &= ~(1<<11); rn rn if(v_pIOPregs->GPEDAT & ( 1 <<11))rn gpioState = 1;rn elsern gpioState = 0;rnrn RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));rnrn rn //---------PE12------15------read single-----in 3---------rn if(gpioNum == 15) rn rn v_pIOPregs->GPECON &= ~ (1<<(24));rn v_pIOPregs->GPECON &= ~(1<<(25));rn v_pIOPregs->GPEUP &= ~(1<<12); rn rn if(v_pIOPregs->GPEDAT & ( 1 <<12))rn gpioState = 1;rn elsern gpioState = 0;rnrn RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));rnrn rn //---------PE13-----16--------read single---in 4--------rn if(gpioNum == 16) rn rn v_pIOPregs->GPECON &= ~ (1<<(26));rn v_pIOPregs->GPECON &= ~ (1<<(27));rn v_pIOPregs->GPEUP &= ~ (1<<13); rn rn if(v_pIOPregs->GPEDAT & ( 1 <<13))rn gpioState = 1;rn elsern gpioState = 0;rnrn RETAILMSG(1,(TEXT("state: %d\r\n"),gpioNum));rnrn rn return 1;rn 论坛

没有更多推荐了,返回首页