📄 max7219的c51程序.txt
字号:
用【 小 | 中 | 大 】字体浏览
C51编程:那位DX能提供一个Max7219的C51程序,急!!! [dk-boy] [13次] 01-12-29 下午 05:10:34
可以试试 [xy-mcu] [39次] 01-12-29 下午 05:18:04
#include "led_ascii.h"
#define no_op 0x00
#define digit0 0x01
#define digit1 0x02
#define digit2 0x03
#define digit3 0x04
#define digit4 0x05
#define digit5 0x06
#define digit6 0x07
#define digit7 0x08
#define decodemode 0x09
#define intensity 0x0a
#define scanlimit 0x0b
#define shutdown 0x0c
#define displaytest 0x0f
sfr p3=0xb0;
sbit din=p3^7;
sbit load=p3^6;
sbit clk=p3^5;
//uc code led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//ASCII字符显示数据;
extern void delay100ms(void);
//uc p[8]={0x00};
/*void delay(void)
{
uc i;
ui j;
j=1500;
while(j--)
{
for(i=0;i<125;i++)
{;}
}
}
*/
/*---------------------------------------
向MAX7219发送一个字节;
---------------------------------------*/
void shift8(uc d)
{
uc i,j;
j=0x80;
load=0;
for(i=0;i<8;i++)
{
clk=0;
if((d&j)!=0)
din=1;
else
din=0;
clk=1;
j>>=1;
}
}
/*---------------------------------------
向MAX7219发送一个显示数据d,显示在addr行/列;
---------------------------------------*/
void load16(uc addr,uc d)
{
shift8(addr);
shift8(d);
clk=0;
load=1;
}
/*---------------------------------------
向MAX7219发送8个字节;即一屏数据;
---------------------------------------*/
void disp_MAX7219(uc idata *p)
{
uc idata i;
for(i=digit0;i<0x09;i++)
{
load16(i,*p++);
}
}
/*---------------------------------------
向MAX7219发送8个字节,以显示一个ASCII码;
---------------------------------------*/
void disp_MAX7219_ascii(uc code *p)
{
uc idata i;
for(i=digit0;i<0x09;i++)
{
load16(i,*p++);
}
}
/*---------------------------------------
显示ASCII字符
---------------------------------------*/
Disp_ascii(uc ch)
{
ui i;
i=ch;
i-=0x20;
i*=8;
disp_MAX7219_ascii(&led[i]);
}
/*---------------------------------------
清屏
---------------------------------------*/
void clear(void)
{
uc i,j;
j=0x01;
for(i=0;i<8;i++,j++)
load16(j,0x00);
}
/*---------------------------------------
初始化MAX7219,并清屏
---------------------------------------*/
void Init_MAX7219(void)
{
load16(decodemode,0x00); //设置无解码方式
load16(intensity,0x09); //设置亮度为10/16
load16(scanlimit,0x07); //8段全扫描
load16(shutdown,0x01); //设置开寄存器
load16(displaytest,0x01);
delay100ms();
delay100ms();
load16(displaytest,0x00);
clear();
}
/*---------------------------------------
演示程序;全屏显示后,一点一点的依次显示;一直循环下去
---------------------------------------*/
/*
void main(void)
{
uc i,j,k;
ini();
while(1)
{
for(j=digit0,k=0;j<decodemode;j++,k++)
{
for(i=0;i<8;i++)
{
p[k]=led[i]|p[k];
load16(j,p[k]);
delay();
}
}
clear();
for(i=0;i<8;i++)
p[i]=0;
}
}
*/
有恩必报!! [dk-boy] [1次] 01-12-29 下午 05:25:00
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2002
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -