❶ 单片机8位数码管显示
给你个程序,可是你的数码管的位选是什么?用的锁存器来选定还是三极管?根据你的意思是只要八个数码管都亮,不需要选择哪个亮哪个灭.
既然是共阳接法,你的阴极应该接的是P2口了,给P2口的八个脚低电平,那么你看这个这个程序吧.
#incluede<reg52.h>//我板子上用的是AT89C52,这是头文件,其实你这个貌似不需要加头文件,头文件里的内容是定义了一些东西,可以包含进来直接用,
voidmain()
{
P2=0xf9;
}
我的是八个三极管来选择亮哪个数码管,也是共阳接法.p1口位选(选择是哪个数码管亮),P0口段选(操作P0口来实现是显示0~F),请看我的板子所配的程序.
#inlcude<reg52.h>
voidmain()
{
P1=0;//选种所有的数码管,也就是八个数码管都亮.
P0=0xf9;//让被选种的数码管都亮"1".
}
看我的截图,我把三个图截在一起,第一个图说的是共阳数码管的接法,.第二个图说的是数码管的段是如何接的,第三个图是我板子上其中四个三极管控制四数码管的选亮与否,也就是位选.
数码管的段说的是数码管其实是有8段LED接在一起,因此就有所谓的共阳和共阴.
❷ 51单片机控制8个数码管并显示1-8
数码管段选连接到单片机P0口,位选连接到P2口
ORG0000h
MAIN:
CALLDISPLAY
AJMPMAIN
DISPLAY:
MOVR0,#0
MOVR1,#0x01
MOVDPTR,#TAB
LOOP:
INCR0
MOVA,R0
MOVCA,@A+DPTR
MOVP0,#0;消隐
MOVP0,A;送段码
CALLDELAY
MOVA,R1;送位码
RLA;移位
MOVP2,A
MOVR1,A
CALLDELAY
CJNER0,#8,LOOP;判断8次是否循环完成
RET
DELAY:
MOVR6,#25
DD:MOVR7,#50
DJNZR7,$
DJNZR6,DD
RET
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
❸ 51单片机八位数码管原理图
下面三个图为开发板的原理图,此开发板用了两个74HC573寄存器,可减少单片机io口的使用.锁存器U8用来控制位选,即控制哪个数码管.U9控制段选,
❹ 单片机驱动8位数码管
设位码接P1;
uchar buf[8] = {0};
void display( ){ //1ms运行一次
static uchar w = 0;
P1 = 0;
P0 = an[buf[w]];
P1 = (1 << w);
w = (w + 1) % 8; //循环+1
}
❺ 单片机 按键控制8位数码管显示问题
关于数码管的显示,是显示完一个位的是数字后,在显示下一个位时要先把上一个位显示彻底关闭掉,通常可以是把全部数码管位全部显示为空的状态,谈后在开下一个位的显示(有延时),这样在开下一个位的锁存时上一个位的数据就不会跑到该位显示,不然会在下一位显示时会与上一个位的数字出现重影现象。。。
还有对于数码管的显示,最好是一次性显示完全部数码管,还没有得位就显示0ff(要记得初始化你的数组)。我个人不建议你这种显示按位数变化方式。。。
for(i=0;i<j;i=i+1)
//每次都显示完8个数码管比较好。。。
{
/*
在此增加把所有数码管显示为0FF状态,全部位都打开显示
*/
display=weima_table[i];
//数码管需要显示的位
weima_latch=1;
//锁存器(位码)打开
weima_latch=0;
//锁存器(位码)关闭
display=cunchudisplay[i];
//数码管需要显示的段
anma_latch=1;
//锁存器(段码)打开
anma_latch=0;
//锁存器(段码)关闭
Delay(100);
}
判断归零一个变量,最好紧跟在修改该值的后面,不用放在主循环里每次循环都要判断,虽然你那没多大问题但可读性不够好。。。
j=j+1;
if(j==8)
{j=0;}
❻ 单片机8位数码管依次显示0到7,要求用c语言实现
假设8个数码管公共端均接地,同时显示0-7
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff
};
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=120;t>0;t--);
}
void main()
{
uchar i=0;
P0=0x00;
while(1)
{
P0=~DSY_CODE[i];
i=(i+1)%10;/*显示0-9*/
DelayMS(200);
}
}
下面程序从左到右显示
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=200;i>0;i--);
}
}
void main()
{
uchar i,k=0x80;
while(1)
{
for(i=8;i>0;i--)
{
P2=0xff;
k=_crol_(k,1);
P0=DSY_CODE[8-i];
P2=k;
DelayMS(3);
}
}
}
❼ 关于单片机驱动八只数码管
共阳管,"0"对应0(A)0(B)0(C)0(D)0(E)0(F)1(G)1(DIGHT),注意你的接线顺序
注意npn管驱动
0x80左移为0x100,或者高位截断的话就是0x00,绝不是0x01,是左移,不是循环左移
❽ 51单片机显示八位数码管的C语言程序
1、最开始,我们先打开keil。
❾ 51单片机八位数码管,
以上设计是没有采用时钟芯片的,时间来源才用的是单片机定时自动重载的方式计算实现。如果加上时钟芯片的话,可以实现断电继续走时,现在常用的方案就是这样。
关于单片机程序方面,难者不会,会者不难,在此寥寥几句话也说不清楚。
有问题可以继续追加