必威体育Betway必威体育官网
当前位置:首页 > IT技术

1.MAX7219

时间:2019-10-15 12:13:24来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

max7219

MAX7219:

详情查见数据手册

数码管显示

定义数码管端口

sbit Max7219_pinCLK= P2^2;//可修改
sbit Max7219_pinCS = P2^3;
sbit Max7219_pinDIN = P2^4;

主体

void Write_Max7219_byte(u8 DATA)
{
	u8 i;
	Max7219_pinCS=0;
	for(i=8;i>=1;i--){
		Max7219_pinCLK=0;
		Max7219_pinDIN=DATA&0x80;//最高位先传,传一个字节			
		DATA=DATA<<1;
		Max7219_pinCLK_1=1;
	}
}
/*****向MAX7219写入数据*****/
void Write_Max7219(u8 address,u8 dat)
{
	Max7219_pinCS=0;
	Write_Max7219_byte(address);  //写入地址   
	Write_Max7219_byte(dat);      //写入数据,即数码管显示数字      
	Max7219_pinCS=1;
}
/*****MAX7219初始化*****/
void Init_Max7219(void)
{
	 Write_Max7219(0x09, 0x00);		//设置工作模式,译码;不译码0xFF(即给0x00显示0)      
 	 Write_Max7219(0x0a, 0x03);		//亮度     
	 Write_Max7219(0x0b, 0x07);		//扫描界限,07表示扫描0-7号八个数码管
	 Write_Max7219(0x0c, 0x01);		//掉电模式,0;普通模式,1;
	 Write_Max7219(0x0f, 0x00);		//显示测试:1;测试结束,正常显示:0    
}  

可对每一个数码管进行操作

/********************************
举例:
		函数功能:数码管全灭(共阴极)
********************************/
void show_Max7219()
{
	Write_Max7219(0x01, 0x00); 
	Write_Max7219(0x02, 0x00);       
	Write_Max7219(0x03, 0x00);       
	Write_Max7219(0x04, 0x00);       
	Write_Max7219(0x05, 0x00);       
	Write_Max7219(0x06, 0x00);       
	Write_Max7219(0x07, 0x00);       
	Write_Max7219(0x08, 0x00);       
}
或
	Write_Max7219(0x01, smg[0]);//实现第一个数码管显示0 

除直接对每一个数码管进行给值显示外,怎样通过直接赋值方式使其显示呢?

/*************************************************
函数功能:
   		给值  13.4,使第三个数码管显示十分位,
		第四个数码管显示个位和小数点,第五位显示十位。
**************************************************/
unsigned char code smg0[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};//0~9
unsigned char code smg1[]={0xfe,0xb0,0xed,0xf9,0xb3,0xdb,0xdf,0xf0,0xff,0xfb};//0.~9.
void show(float w)
{
	float w1;
	int ii,ij,ik;
	Init_Max7219_1();         //MAX7219初始化
	w1=w*10;                     //变成整数
    ii=w1/100;                 //取十位
    ij=(w1-100*ii)/10;         //取个位
	ik=w1-100*ii-10*ij;        //取十分位
	if(ii==0){                  //若没有十位,则不显示
	Write_Max7219_1(0x05,0x00);//用来显示十位的数码管5不亮
	}
	else{
	Write_Max7219_1(0x05,smg0[ii]);//显示十位
	}
	Write_Max7219_1(0x04,smg1[ij]);   //显示个位和小数点
	Write_Max7219_1(0x03,smg0[ik]); 	 //显示十分位
}

环境:keil 5,STC15W4KxxS4

补充:

unsigned char code smg0[];

code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。

程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。

附:

c51中的存储类型

code :程序存储区(64KB),

data :可直接寻址的内部数据存储区(128B)

idata:不可直接寻址的内部数据存储区(256B)

bdata:可位寻址内部数据存储区(16B)

xdata:外部数据存储区(64KB)

pdata:分页的外部数据存储区

相关阅读

2019开网店赚钱吗?有发展前景吗?

这几年有些人在网上开网店赚了不少钱,而这些人可能就是因为没有运营好而没有赚到钱,这就有人问了,淘宝开网店到底赚不赚钱?赚钱为什

2018年2月 英语--anything is OK

前言英语学习的过程,有的时候可能是需要度过一段平淡期的,有的时候,学一样东西时间长了,如果不能注入新鲜元素的话,便很快成为形式化的

VS2013编译C语言遇到Debug Assertion Failed! Expre

如图所示,以前出现过这个错误,是因为fprintf输出路径的问题,现在路径已经仔细检查过没有问题。请大神仔细看如下描述。问题出现过程:

新广告法9月1日施行 做推广应该注意什么

新修订的《广告法》,将于2015年9月1日起正式施行。新法与现行的广告法相比,涉及面更广,查处更加严格、如果不了解新规,一举报一个准。

拼多多砍价,和之前的「1元购」是一回事吗?

黑产不可能被禁止,而只要“砍价”持续存在,那么就势必会继续助长黑产的发展,对社会的不良影响会持续扩大。5月7日,拼多多发布公告,近期

分享到:

栏目导航

推荐阅读

热门阅读