📄 m7219.c
字号:
/* *********************************************************************
数字钟
串行8位显示Max7219模块。
晶振 11.0592MHz,
2008年10月
*************************************************************************/
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define _NOP() _nop_();_nop_()
sbit LOAD=P3^4; // P1^0
sbit DIN=P1^4; // P1^1
sbit CLK=P1^5; // P1^2
///////////////////////////////////////////////////////////////////////////////
/* 发送一字节到MAX7219,高位在前 */
void send(uchar c)
{ uchar bit_cnt;
CLK=0;
_NOP();
for(bit_cnt=0;bit_cnt<8;bit_cnt++)
{ if((c<<bit_cnt)&0x80)DIN=1;
else DIN=0;
_NOP();
CLK=1;
_NOP();
_NOP();
CLK=0;
_NOP();
_NOP();
}
}
/*向显示器某位送命令或数字*/
void input(uchar addr,uchar dat)
{
send(addr);/*传送寄存器地址字节(位选)*/
send(dat);/*传送寄存器数据字节*/
LOAD=1;
_NOP();
_NOP();
LOAD=0;
}
/*初始化显示器*/
void dip_int(void)
{ uchar i;
CLK=0;
LOAD=0;
input(0x0c,0x00);/*关闭显示*/
input(0x09,0xff);/*全译码模式*/
input(0x0b,0x07);/*显示 8*LED */
input(0x0a,0x02);/*亮度占空比31/32 */
input(0x0f,0x00);/*显示测试寄存器为正常显示方式 */
input(0x0c,0x01);/*开显示 */
for(i=8;i>0;i--)input(i,0);
}
/*关闭显示*/
void cls(void)
{ uchar i;
CLK=0;
LOAD=0;
for(i=1;i<9;i++)input(i,0x0f);/*每个字符‘黑’*/
LOAD=1;
CLK=1;
}
/*显示字符串(8 位)*/
void str(uchar *s)
{ uchar i;
input(0x0c,0x01);
for(i=8;i>0;i--)
input(i,s[i-1]);
}
/*软件延时*/
void msec( uint x)
{ uchar j;
while(x--)
{ for(j=0;j<250;j++)
{
}/*一次延时0.5毫秒。*/
}
}
////////////////////////////////////////////////////////////////////////////////
/* 主程序 */
void main(void)
{
uchar sz[11]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x00};
dip_int();
msec(500);
cls();
msec(500);
str(sz);
sz[5]=sz[5]&0x3f;/*小数点不显示 */
msec(350);
str(sz);
sz[5]=sz[5]|0x80;/*小数点显示 */
msec(350);
str(sz);
for(;;);
}
///////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -