📄 m7219drv.c
字号:
/****************************************************************************/
/* */
/* Copyright (c) 2005, 老树工作室 */
/* All rights reserved. */
/* */
/* Email:laoshu0902@163.com */
/* www.laoshu0902.bokee.com */
/* */
/****************************************************************************/
/****************************************************************************/
/* 文件名:m7219drv.c */
/* 版 本:Version 1.0 */
/* 描 述:max7219驱动代码 */
/* 作 者:spot */
/* 函 数: */
/* send_led */
/* init_max7219 */
/* disp_09 */
/* */
/* 参考资料:老古开发网 */
/* 历史记录: */
/* spot 2005-06-20 Creat Inital version. (Version 1.0) */
/****************************************************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
typedef unsigned char u_char;
typedef unsigned int u_int;
sbit DIN = P0^0;
sbit LOAD = P0^1;
sbit CLK = P0^2;
/* 定义显示数字数组 */
u_int led_code_n09[10]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};
/* 定义显示位置数组 */
u_int led_code_p07[8]={0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,0x0800};
void send_led(u_int n); /* 向MAX7219发送命令 */
void init_max7219(void); /* 初始化MAX7219 */
void disp_09(u_char position, u_char num); /* MAX7219显示子程序 */
/****************************************************************************/
/* 函数名:send_led */
/* 功 能:向MAX7219发送命令 */
/* 作 者:spot */
/* 输 入:n 向MAX7219发送的命令16bit */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-06-20 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void send_led(u_int n)
{
u_int i;
LOAD = 0;
CLK = 0;
DIN = 0;
for (i=0x8000; i>=0x0001; i=i>>1)
{
if ( ( n & i ) == 0 )
{
DIN = 0;
}
else
{
DIN = 1;
}
CLK = 1;
CLK = 0;
}
LOAD = 1;
}
/****************************************************************************/
/* 函数名:init_max7219 */
/* 功 能:初始化MAX7219 */
/* 作 者:spot */
/* 输 入:无 */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-06-20 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void init_max7219(void)
{
send_led( 0x0C00 ); /* shutdown */
send_led( 0x0A0F ); /* 置LED亮度为31/32 */
send_led( 0x0B07 ); /* 置LED扫描范围DIGIT0-7 */
send_led( 0x0900 ); /* 置LED显示为不译码方式 */
send_led( 0x0C01 ); /* 置LED为正常状态 */
}
/****************************************************************************/
/* 函数名:disp_09 */
/* 功 能:在指定位置显示数据 */
/* 作 者:spot */
/* 输 入: */
/* position 显示位置0-7 [7][6][5][4][3][2][1][0] */
/* numn 显示数值0-9 */
/* */
/* 输 出:无 */
/* */
/* 历史记录: */
/* spot 2005-06-20 Creat Inital version. (Version 1.0) */
/****************************************************************************/
void disp_09(u_char position, u_char num)
{
if ( ( num & 0x80 ) == 0 )
{
send_led( led_code_p07[ position ] | led_code_n09[ num ] );
}
else
{
send_led( led_code_p07[ position ] | led_code_n09[ num & 0x7F ] | 0x80 );
}
}
main()
{
u_int i;
init_max7219();
for (i=0; i<8; i++)
{
disp_09(i,0);
}
disp_09(0,0);
disp_09(1,1);
disp_09(2,2);
disp_09(3,3);
disp_09(4,4);
disp_09(5,5);
disp_09(6,6);
disp_09(7,7);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -