完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、MAX7221是集成式共阴极数码管驱动芯片。可以用来驱动8位7段式数码管,也可以驱动条形LED或者8*8LED点阵
单片机仅仅需要3个IO口就可以控制MAX7221驱动8位数码管。注意这里的数码管是共阴极的。 2、在keil c51中新建工程ex67,编写如下程序代码,编译并生成ex67.hex文件 //利用数码管驱动芯片max7221实现8位数码管显示 #include 《reg51.h》 #include 《intrins.h》 ***it DIN = P2^0; //数据串出引脚 ***it CS = P2^1; //片选端 ***it 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); // 显示8位 } while(1); } 3、在proteus中新建仿真文件ex67.dsn,电路原理图如下所示 4、将ex67.hex文件载入at89c51中,启动仿真,按动拨码开关,观察运行结果。下图是某一时刻程序运行结果 |
|
|
|
只有小组成员才能发言,加入小组>>
4508个成员聚集在这个小组
加入小组3334 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4262 浏览 1 评论
4289 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 11:16 , Processed in 0.654070 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号