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:分页的外部数据存储区
相关阅读
这几年有些人在网上开网店赚了不少钱,而这些人可能就是因为没有运营好而没有赚到钱,这就有人问了,淘宝开网店到底赚不赚钱?赚钱为什
前言英语学习的过程,有的时候可能是需要度过一段平淡期的,有的时候,学一样东西时间长了,如果不能注入新鲜元素的话,便很快成为形式化的
VS2013编译C语言遇到Debug Assertion Failed! Expre
如图所示,以前出现过这个错误,是因为fprintf输出路径的问题,现在路径已经仔细检查过没有问题。请大神仔细看如下描述。问题出现过程:
新修订的《广告法》,将于2015年9月1日起正式施行。新法与现行的广告法相比,涉及面更广,查处更加严格、如果不了解新规,一举报一个准。
黑产不可能被禁止,而只要“砍价”持续存在,那么就势必会继续助长黑产的发展,对社会的不良影响会持续扩大。5月7日,拼多多发布公告,近期