菜鸟想请问一下各位高手 图中四位数码管与51单片机相连的1234四个脚 在实物中该如何对应连接?。。。。 数码管控制的硬件描述?单片机的
\u5355\u7247\u673a\u4e0a\u7684\u6570\u7801\u7ba1\u4eae\u9700\u8981\u4ec0\u4e48\u786c\u4ef6\u5355\u4e2a\u7684\u6570\u7801\u7ba1\u4e0d\u9700\u8981\u786c\u4ef6\uff0c\u5982\u8fc7\u662f\u591a\u4f4d\u6570\u7801\u7ba1\u5219\u9700\u8981\u4e09\u6781\u7ba1\u53bb\u9a71\u52a8\uff01\u7b49\u7b49\u597d\u6709\u5f88\u591a\u529e\u6cd5\u7684
\u9759\u6001\u3001\u52a8\u6001\uff0c\u4e24\u79cd\u3002
// 数码管与51单片机相连,实物与仿真图一样连接就可以,也可以在A~G、DP线上串一个300欧姆的电阻。
#include<reg52.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,};//数组0到F
uchar num,tt;
void main()
{
num=0;
tt=0;
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-5000)/256;//为定时器设置初值 5 mS
TL0=(65536-5000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
P3=0xe1;//位选
P1=0xc0;//段选
while(1)
{
if(tt==250) //计时器使tt满200,则执行后面的语句
{
tt=0;
num++;
if(num>15)
{
num=0; //num加到15后置0
}
}
}
}
void exter0() interrupt 1 //定时器中断函数,1方式
{
static unsigned char led_shift=0x00; //定义静态变量
TH0=(65536-5000)/256; // 5 mS
TL0=(65536-5000)%256;
tt++;
switch(led_shift) //选择数码管控制位
{
case 0: P3=0xfb;P1=~table[num]; break; //控制左1数码管
case 1: P3=0xf7;P1=~table[num+1]; break; //控制左2数码管
case 2: P3=0xef;P1=~table[num+2]; break; //控制左3数码管
case 3: P3=0xdf;P1=~table[num+3]; break; //控制左4数码管
default:break;
}
led_shift++; //数码管控制变量自加
if(led_shift==0x04) //判断是否扫描一轮
led_shift=0x00; //归零进行下一轮扫描
}
与单片机的连接没有什么要求,你自己写程序的时候对应就可以了比如说 我将1234四个脚分别接P2.0~P2.3引脚,在写程序的时候注意1对应P2.0引脚,同理234.
尽管数码管是共阴的,但是由于4位数码管的各个位都是由A B C D E F G DP (段选)驱动的 所以一次只能选择其中的一位来显示 这时候呢就是1234(位选) 四个引脚来选择到底是哪一位数码管显示 (如果要选择最左边的一位显示的话共阴数码管1脚对应的P2.0引脚应该赋以低电平(0)。
如图所示,ABCDEFGH接P0口,1234接P2.0~P2.3
共阴led是不需要接地的,它们的公共端就是这里的位选信号,接单片机io口,剩下的8段接一个port最为数据口。
拿到LED你不知道接线的话可以用万用表检测一下。
1234引脚是依次对应左到右四个数码管(4个共阴的),比如把第一个共阴的1引脚接地,然后对应导通abcdefg dp,就是导通第一个数码管对应的段,就能让第一个数码管显示数字,其他数码管依次这么操作就行了
扩展阅读:扫一扫出答案 ... 看图 ... 看图神器 ... 菜鸟银行员 全一卷下拉式 ... 看图工具 ... 图片浏览软件 ... 菜鸟头头叉叉叉 ... 菜鸟图片 ... 菜鸟vs高手无限金币版 ...