#include <REGX52.H>
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void nixie(unsigned char location,number)
{
switch(location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=table[number];
}
void main()
{
nixie(1,2);
while(1)
{
}
}
解释
该51单片机采用的是共阴极数码管,所以我们的阳极P0接1有效
我们引用了数组table来表示段码,table[number],当number为0时引用0的段码,1的时候引用1的段码
例如nixie(1,2);指的是数码管第一个位置显示2,我们由图可知显示2的话要使得abdeg显示,即abdeg段码要接1,P0为0x5B(0101 1011),第一个位置为LED8由74HC138译码器决定,即P2_4=1;P2_3=1;P2_2=1

74HC245芯片
74HC245芯片是一种双向缓冲器,主要用于实现两个总线之间的数据传输。(在51中常应用于点阵屏)
DIR(即图中AB/BA引脚): 方向引脚,控制数据的传输方向。当DIR引脚为高电平时,数据从A端传输到B端;当DIR引脚为低电平时,数据从B端传输到A端。
A1-A8:数据传输引脚
B1-B8:数据传输引脚
OE(图中CE引脚)高电平时,输出端口处于失能状态;OE为低电平时,输出端口处于使能状态。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_74219261/article/details/140001162

C51子函数
•子函数:将完成某一种功能的程序代码单独抽取出来形成一个模块,在其它函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的、
void Function(unsigned char x, y)
{
}
返回值 函数名(形参)
{
函数体
}
C51数组
•数组:把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据
int x[3]; //定义一组变量(3个)
int x[]={1,2,3}; //定义一组变量并初始化
x[0] //引用数组的第0个变量
x[1] //引用数组的第1个变量
x[2] //引用数组的第2个变量
引用x[3]时,数组越界,读出的数值不确定,应避免这种操作
数码管段码表

switch函数
switch(变量)
{
case 常量1:语句体1;break;
case 常量2:语句体2;break;
(...)
default:语句体x;break;
}
将变量与case后的各个常量对比
若有相等,则执行相应的语句体
若没有一个相等,则执行default后的语句体
(default可以不写)
C51基本语句
| 语句 | 解释 | 语句 | 解释 |
| if(逻辑表达式) { 语句体1; } else { 语句体2; } | 如果逻辑表达式成立 执行语句体1 否则 执行语句体2 (else可以不写) | for(初始化;逻辑表达式;更改条件) { 循环体; } | 先执行初始化 再判断逻辑表达式 若成立则执行循环体 执行后更改条件 再判断逻辑表达式 直到表达式不成立 |
| while(逻辑表达式) { 循环体; } | 如果逻辑表达式成立 执行循环体 执行后再次判断 若还成立则继续执行直到表达式不成立 | switch(变量) { case 常量1:语句体1;break; case 常量2:语句体2;break; (…) default:语句体x;break; } | 将变量与case后的各个常量对比 若有相等,则执行相应的语句体 若没有一个相等,则执行default后的语句体 (default可以不写) |