我是初学者,大家帮我看看我想用AT89C52通过MAX7219驱动8x8点阵的程序哪里错了怎么改? 250
}}//-------------------------------------------//功能:向MAX7219写入数据//入口参数:address、dat//出...
} }//-------------------------------------------//功能:向 MAX7219 写入数据//入口参数:address、dat//出口参数:无//说明:void Write_Max7219(uchar address,uchar dat){Max7219_pinCS=0;Write_Max7219_byte(address); //写入地址,即数码管编号Write_Max7219_byte(dat); //写入数据,即数码管显示数字Max7219_pinCS=1;}void Init_MAX7219(void){Write_Max7219(0x09, 0x00); //译码方式:BCD 码Write_Max7219(0x0a, 0x07); //亮度Write_Max7219(0x0b, 0x07); //扫描界限;8 个数码管显示Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0}void main(void){uchar i,j;Delay_xms(50);Init_MAX7219();while(1){for(j=0;j<10;j++){for(i=1;i<9;i++)Write_Max7219(i,disp1[j][i-1]);Delay_xms(1000);} } }
warning L1: unresolved external symbol
symbol: ?c_start
module: startup.obj(?c_startup)
warning L2: reference made to unresolved external
symbol: ?c_start
module: startup.obj(?c_startup)
address: OOOD 展开
warning L1: unresolved external symbol
symbol: ?c_start
module: startup.obj(?c_startup)
warning L2: reference made to unresolved external
symbol: ?c_start
module: startup.obj(?c_startup)
address: OOOD 展开
2个回答
展开全部
亲,嗮出来的程序不够全哦,不过既然用MAX7219,那么对它的通信部分则都是一样的
MAX7219 除了电源两根线之外,还需要三根信号线连接至单片机
1、使能,即用来控制MAX7219是否允许写入数据的
2、时钟、每更换一位字节数据则需要输出一个脉冲,作为时钟信号
3、数据、在脉冲有效状态下传送数据,此数据是二进制位传递,非0即1
只要对MAX7219的数据传输摆弄明白,那么久可以随意控制MAX7219驱动的电子元件了,数码管也好,LED点阵也罢,都在掌握之内
MAX7219在进行通信的时候,是需要先送地址再送数据的,就是说要传递一个数据,就要进行两次通信
打个比方,例如想把鞋子收起来,然而鞋柜却很多,那么收起鞋子的步骤只能是 先确定要放在哪里,然后再将鞋子放进去,所以MAX7219的通信原理就是这么简单
话不多说,贴出个经过硬件测试通过的程序出来,供大家参考!
这是一个利用一片MAX7219的八位数码管显示模块,程序中只是为了试验,所以只显示固定数字12-34-56,程序中的星号是各个函数之间区分用的,可以删除
#include <REG52.h> //通用89C52头文件
sbit DN=P3^7; sbit CS=P3^6; sbit CL=P3^5;//MAX7219 端口定义
void MaxINT(void); void Max(char Xi,char Yi); void MaxR(char ch);// Max7219
void XSa(void);
/***************************************************************************/
void main(void)//主函数
{
MaxINT(); // MAX7219初始化
while(1)
{
XSa(); //数据显示
}
}
/***************************************************************************/
void XSa(void)//显示时钟数据
{
Max(1,6); Max(2,5); Max(3,0x0a);
Max(4,4); Max(5,3); Max(6,0x0a);
Max(7,2); Max(8,1);
}
/***************************************************************************/
void MaxINT(void)// MAX7219初始化
{
Max(0x0b,0x07);// 设置扫描界限
Max(0x09,0xff);// 设置译码模式
Max(0x0a,0x0a);// 设置亮度
Max(0x0c,0x01);// 设置工作模式
}
/***************************************************************************/
void Max(char Xi,char Yi)// Max7219 数据写入 主函数
{CS=0;MaxR(Xi);MaxR(Yi);CS=1;}
/***************************************************************************/
void MaxR(char ch)// Max7219 数据写入 子函数
{
char m,temp;
for (m=0;m<8;m++)
{
temp=ch&0x80; ch=ch<<1;
if(temp){DN=1;CL=0;CL=1;}
else{DN=0;CL=0;CL=1;}
}
}
MAX7219 除了电源两根线之外,还需要三根信号线连接至单片机
1、使能,即用来控制MAX7219是否允许写入数据的
2、时钟、每更换一位字节数据则需要输出一个脉冲,作为时钟信号
3、数据、在脉冲有效状态下传送数据,此数据是二进制位传递,非0即1
只要对MAX7219的数据传输摆弄明白,那么久可以随意控制MAX7219驱动的电子元件了,数码管也好,LED点阵也罢,都在掌握之内
MAX7219在进行通信的时候,是需要先送地址再送数据的,就是说要传递一个数据,就要进行两次通信
打个比方,例如想把鞋子收起来,然而鞋柜却很多,那么收起鞋子的步骤只能是 先确定要放在哪里,然后再将鞋子放进去,所以MAX7219的通信原理就是这么简单
话不多说,贴出个经过硬件测试通过的程序出来,供大家参考!
这是一个利用一片MAX7219的八位数码管显示模块,程序中只是为了试验,所以只显示固定数字12-34-56,程序中的星号是各个函数之间区分用的,可以删除
#include <REG52.h> //通用89C52头文件
sbit DN=P3^7; sbit CS=P3^6; sbit CL=P3^5;//MAX7219 端口定义
void MaxINT(void); void Max(char Xi,char Yi); void MaxR(char ch);// Max7219
void XSa(void);
/***************************************************************************/
void main(void)//主函数
{
MaxINT(); // MAX7219初始化
while(1)
{
XSa(); //数据显示
}
}
/***************************************************************************/
void XSa(void)//显示时钟数据
{
Max(1,6); Max(2,5); Max(3,0x0a);
Max(4,4); Max(5,3); Max(6,0x0a);
Max(7,2); Max(8,1);
}
/***************************************************************************/
void MaxINT(void)// MAX7219初始化
{
Max(0x0b,0x07);// 设置扫描界限
Max(0x09,0xff);// 设置译码模式
Max(0x0a,0x0a);// 设置亮度
Max(0x0c,0x01);// 设置工作模式
}
/***************************************************************************/
void Max(char Xi,char Yi)// Max7219 数据写入 主函数
{CS=0;MaxR(Xi);MaxR(Yi);CS=1;}
/***************************************************************************/
void MaxR(char ch)// Max7219 数据写入 子函数
{
char m,temp;
for (m=0;m<8;m++)
{
temp=ch&0x80; ch=ch<<1;
if(temp){DN=1;CL=0;CL=1;}
else{DN=0;CL=0;CL=1;}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询