标题: 新人有一些数码管问题不懂 [打印本页]

作者: lushaoqian    时间: 2017-10-20 12:54
标题: 新人有一些数码管问题不懂
#include<reg52.h>            //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
uint x,y;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};            //共阴极数码管编码
void display(uchar,uchar,uchar,uchar);  //声明子函数
void delay(int);                      //声明子函数
void main()
{
while(1)
{
display(1,2,3,4);          //主程序始终调用数码管显示子程序
}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
P2=0xef;                               
P0=table[a];                       //给第一个数码管送"a"
delay(1);                          //延时1ms                       
P2=0xdf;
P0=table;                      //给第二个数码管送"b"
delay(1);                         //延时1ms
P2=0xbf;
P0=table[c];                      //给第三个数码管送"c"
delay(1);                         //延时1ms
P2=0x7f;                          
P0=table[d];                      //给第三个数码管送"d"
delay(1);                         //延时1ms
}
void delay(uint z)                   //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
我不懂每个‘’P2=‘’的意思
还有那个定义的   abcd是不是对应的就是
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};   
这里面的前4个

数码管.jpg (65.56 KB, 下载次数: 45)

数码管.jpg

作者: 一笑泯恩仇啊    时间: 2017-10-20 19:17
p2的不同赋值对应打开不同的数码管位选,abcd对应在主函数中是数组的2到5位,而且你的显示函数里面有一个明显的错误,是table[b]才对
作者: liushuiwuqing    时间: 2017-10-20 19:28
比如 P2=0xbf ,就是让单片机P2口  P2.7-P2.0的8个引脚输出的电平依次为1011 1111,即让P2.6这个端口输出低电平,此时第3位数码管亮。abcd应该对应的是数组里的第二到第五个,因为数组从0开始的。
作者: STC89C51    时间: 2017-10-20 19:51
这是数码管动态显示,P0口输出段选信号,就是让数码管显示数字,P2口控制位选,就是让那个数码管显示。楼主说的“abcd”是十六进制,分别对应10、11、12、13。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1