不用P3怎么用其他的,我P0P1P2试了都不行,P0是控制8个二极管的
追答数码管要共阳的
追问P012用不了吗?
追答都可以用,是你说要用P3口
追问我P012用不了,不知道要怎么弄?P1好像就控制8个2级管,要怎么设置它能控制数码管?
追答都可以用,是你说要用P3口
提供一个示例:
这个图是Proteus ISIS仿真上用的,位12345678因没有电流驱动,是不能实际使用的,仿真没问题。
程序如下:
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define LED_abc P0
#define LED_123 P2
sbit k3=P1^2;
//数码管显示(共阳): 0 1 2 3 4 5 6 7 8 9
uchar code dispArr[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
// 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
// 黑 全亮 点 -
0xFF,0x00, 0x7f, 0xbf};
uchar dispBuf[8]={0,1,2,3,4,5,6,7}; //显示缓冲区
//延时子程序
void delay(unsigned int a){
while(--a);
}
//显示子程序
void display(void)
{ uchar i;
uchar ik;
ik=0x01;
for(i=0;i<8;i++){
LED_abc=dispArr[dispBuf[i]];
LED_123=ik;
delay(200); //延时
LED_123=0x00; //关闭显示
ik<<=1;
}
}
//主函数
void main(void)
{
while(1){
display();
}
}
怎么知道数码管要用某个口。我对P0进行操作为什么它就能改变那8个二极管的状态,前面也没申明P0口控制8个二极管,它怎么知道是哪个控制哪个的?
追答P0=0xFF; 一个字节8个位,1111 1111 对应数码管dp,g,f,e,d,c,b,a笔画(段)。
给你一个图
追问看不懂,右边那个5V干嘛的
追答右边+5V是数码管公共端(共阳极数码管)的电源。段码由P0口输出(低电平有效),位码由P3口输出(也是低电平有效,也可以用P1、P2口都可以)。
追问电流不是要从上拉电阻那个5V流进二极管的吗,怎么是右边的
追答使用的是共阳极的数码管,电流是从右边+5V经过PNP三极管流入数码管共阳极端,再流过a~g段LED,从a~g端口流出,再经过R2~R9(限流电阻)流入P0端口,在单片机内部流到地线。
追问那个P3怎么控制它亮或不亮的?
追答P3口为高电平时,PNP三极管截止,数码管公共端无电,就不亮了。
P3口为低电平时,PNP三极管导通,数码管公共端有电,就点亮显示,具体显示数字由P0口段码决定。