at89c51芯片,可以通过MAX7221芯片进行数码管驱动,实现三个引脚控制8位数码管,驱动函数已经写好,包括数码管显示函数,可以随心控制你想要输出的数字。目前置为8位数,自动减1,具体功能可以自行加入。
部分源码:完整源码和仿真文件在本文尾部附件中
- #include <reg51.h>
- #include <intrins.h>
- sbit DIN = P2^0; //数据串出引脚
- sbit CS = P2^1; //片选端
- sbit CLK = P2^2; //移位时钟端
- unsigned char disp_buff[10] = {0,1,2,3,4,5,6,7,8,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); //工作模式
- write_data(0x0f,0x00); //工作模式
- }
- void main(void)
- {
- unsigned char Sec_1=0,Sec_2=0,Sec_3=0,Sec_4=0,Sec_5=0,Sec_6=0,Sec_7=0,Sec_8=0;
- unsigned char i;
- unsigned long int Sum=87654321;
- init_max7221(); // 初始化
- delayms(2);
- while(1)
- {
- Sum-=10;
- Sec_8 = Sum/10000000;
- Sec_7 = Sum%10000000/1000000;
- Sec_6 = Sum%1000000/100000;
- Sec_5 = Sum%100000/10000;
- Sec_4 = Sum%10000/1000;
- Sec_3 = Sum%1000/100;
- Sec_2 = Sum%100/10;
- Sec_1 = Sum%10;
-
- for(i = 0;i < 8;i++)
- {
- switch(i)
- {
- case 0:write_data(i+1,disp_buff[Sec_8]);break;
- case 1:write_data(i+1,disp_buff[Sec_7]);break;
- case 2:write_data(i+1,disp_buff[Sec_6]);break;
- case 3:write_data(i+1,disp_buff[Sec_5]);break;
- case 4:write_data(i+1,disp_buff[Sec_4]);break;
- case 5:write_data(i+1,disp_buff[Sec_3]);break;
- case 6:write_data(i+1,disp_buff[Sec_2]);break;
- case 7:write_data(i+1,disp_buff[Sec_1]);break;
- default:break;
- }
- }
- i=0;
- }
- }
复制代码 完整源码和仿真文件:
基于MAX7221驱动数码管.rar
(50.71 KB, 售价: 2 E币)
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|