当前位置:首页 > MAX7221 应用实例
基于proteus的51单片机仿真实例七十九、8位数码管驱动芯片max7221应用实例
1、MAX7221是集成式共阴极数码管驱动芯片。可以用来驱动8位7段式数码管,也可以驱动条形LED或者8*8LED点阵
单片机仅仅需要3个IO口就可以控制MAX7221驱动8位数码管。注意这里的数码管是共阴极的。
2、在keil c51中新建工程ex67,编写如下程序代码,编译并生成ex67.hex文件 //利用数码管驱动芯片max7221实现8位数码管显示 #include
sbit DIN = P2^0; //数据串出引脚 sbit CS = P2^1; //片选端 sbit CLK = P2^2; //移位时钟端
unsigned char disp_buff[8] = {2,0,1,0,10,2,10,9}; //显示的数字,数值为10的时候,显示“-” // 延时函数
void delayms(unsigned int x) {
unsigned char i; while(x--) {
for(i = 0;i < 120;i++); } }
//写数据函数
void write_data(unsigned char addr,unsigned char dat) {
unsigned char i;
CS = 0; // 先写地址,片选置低,串行数据加载到移位寄存器 for(i = 0;i < 8;i++) // {
CLK = 0; //时钟上升沿数据移入内部移位寄存器
addr <<= 1; //待发送的地址,每次左移一次,高位在前发送,
DIN = CY; //数据移位后,如果有溢出,则可以从进位位CY中获得溢出的数据位
CLK = 1; _nop_(); _nop_();
CLK = 0; //下降沿时数据从DOUT移出 }
for(i = 0;i < 8;i++) {
CLK = 0; //
dat <<= 1; //发送数据 DIN = CY; CLK = 1; _nop_(); _nop_(); CLK = 0; }
CS = 1; //CS上升沿,数据锁存 }
//初始化函数
void init_max7221(void) {
write_data(0x09,0xff); //编码模式 write_data(0x0a,0x07); //亮度控制
write_data(0x0b,0x07); //扫描数码管的位数 write_data(0x0c,0x01); //工作模式 }
void main(void) {
unsigned char i;
init_max7221(); // 初始化 delayms(2);
for(i = 0;i < 8;i++) {
write_data(i+1,disp_buff[i]); // 显示8位 }
while(1); }
3、在proteus中新建仿真文件ex67.dsn,电路原理图如下所示
共分享92篇相关文档