找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2318|回复: 3
打印 上一主题 下一主题
收起左侧

新人有一些数码管问题不懂

[复制链接]
跳转到指定楼层
楼主
#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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:229106 发表于 2017-10-20 19:17 | 只看该作者
p2的不同赋值对应打开不同的数码管位选,abcd对应在主函数中是数组的2到5位,而且你的显示函数里面有一个明显的错误,是table[b]才对
回复

使用道具 举报

板凳
ID:201949 发表于 2017-10-20 19:28 | 只看该作者
比如 P2=0xbf ,就是让单片机P2口  P2.7-P2.0的8个引脚输出的电平依次为1011 1111,即让P2.6这个端口输出低电平,此时第3位数码管亮。abcd应该对应的是数组里的第二到第五个,因为数组从0开始的。
回复

使用道具 举报

地板
ID:137239 发表于 2017-10-20 19:51 | 只看该作者
这是数码管动态显示,P0口输出段选信号,就是让数码管显示数字,P2口控制位选,就是让那个数码管显示。楼主说的“abcd”是十六进制,分别对应10、11、12、13。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表