点亮数码管的c语言
㈠ 请教单片机控制数码管显示数字c语言程序问题,满意加分
if(8==j) j=0;
错在这里改if(j==8){j=0;}还有就是你的程序也有问题,程序运行时P0=0x01的情况不会出现,因为P0=0x01<<(j++);后进入switch的P0只会从0x02开始~粗心了吧~还有就是你用的什么数码管?不是用的那种共阳、共阴8位数据端的数码管?是8421那种?下面修改后的程序(数码管采用的是共阳的数码管)#include <reg51.h>#define uchar unsigned charuchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
main()
{
int i;
char j=0;
while(1)
{
switch(P0)
{
case 0x01: P2=led[0];break;
case 0x04: P2=led[1];break;
case 0x02: P2=led[2];;break;
case 0x08: P2=led[3];;break;
case 0x10: P2=led[4];;break;
case 0x40: P2=led[5];;break;
case 0x20: P2=led[6];;break;
case 0x80: P2=led[7];;break;
}
for(i=0;i<10000;i++);//延时时间随意写的
if(j<7) {j++;P0=0x01<<j;}else{P0=0x01;j=0;}
}
}
如果还有问题~就留给邮箱~我发仿真和程序给你~上面的程序是随手打的~可能有错哈~不过思路是对的~
㈡ 51单片机数码管,下面是数码管原理图,求简单的C语言程序点亮数码管
你试着将所有的都置1,或者为0,加上控制端 共四种情况 就会出来了 左边的8个口就是数码管8字 中的7个横竖管 加上一个 点 共八个 右边为哪个数码管的控制端
毕竟不知道是共阴极还共阳极的数码管
㈢ 80C51单片机数码管的显示 C语言
用10个8段数码管动态扫描显示的:
#include
unsigned
char
const
dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
显示段码值0123456789
unsigned
char
code
seg[]={0,1,2,3,4,5,6,7,8,9};//分别对应相应的数码管点亮,即位码
/*------------------------------------------------
延时子程序
------------------------------------------------*/
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned
char
i;
while(1)
{
P0=dofly[i];//取显示数据,段码
P2=seg[i];
//取位码
delay(20000);
//扫描间隙延时,时间太长会闪烁,太短会造成重影,自己调试
i++;
if(10==i)
//检测10位扫描完全?
i=0;
}
}
㈣ c语言如何编程点亮一个数码管显示数字
共阴极数码管也就是说,当控制信号为1时该段LED点亮,8段数码管的数字0~9定义为:
3FH,06H,5BH,4FH,66H ;01234
6DH,7DH,07H,7FH,6fh ;56789
以下为简易8路抢答器的例程:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit rstkey=P2^2;
sbit speaker=P2^0;
void delay()//延时约400毫秒
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchar i,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case 0x01:i=1;break;
case 0x02:i=2;break;
case 0x04:i=3;break;
case 0x08:i=4;break;
case 0x10:i=5;break;
case 0x20:i=6;break;
case 0x40:i=7;break;
case 0x80:i=8;break;
default:break;
}
P1=table[i];//显示按下抢答器的号
P0=key;//显示按下键号的LED
while(1)
{
if(rstkey==0)break;//主持人按下复位键则重新开始
speaker=~speaker;//否则蜂鸣器报警
delay();
}
}
}
㈤ 怎么用c语言编写数码管1234和5678来回闪烁
1.51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h>//51单片机头文件
#include<intrins.h>//包含有左右循环移位子函数的库
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
sbitbeep=P2^3;
voiddelay(uintz)//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{//delay(500);大约延时500ms.
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()//主函数
{
uchara,i,j;
while(1)//大循环
{
a=0xfe;//赋初值
for(j=0;j<3;j++)for(i=0;i<8;i++)//左移三次
{
P1=a;//点亮小灯
beep=0;//开启蜂鸣器
delay(50);//延时50毫秒
beep=1;//关闭蜂鸣器
delay(50);//再延时50毫秒
a=_crol_(a,1);//将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++)for(i=0;i<8;i++)//右移三次
{
P1=a;//点亮小灯
beep=0;//开启蜂鸣器
delay(50);//延时50毫秒
beep=1;//关闭蜂鸣器
delay(50);//再延时50毫秒
a=_cror_(a,1);//将a变量循环右移一位
}
}
}
2.51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
㈥ C语言单片机代码 数码管动态显示
你这数组里面16组数分别为0~f的共阴数码管的编码,你说只需要数码管显示0~6,那么多余的就没有用到,或者 在别的函数里面有用到 你仔细看你的程序……
P0=table[1],意思就是说 往P0里面送table这组数里面的第2个数也就是0x06,0x06正好是共阴数码管显示1的编码。所以数码管就会显示1,同理 table[2]就是显示2的编码,需要注意的是table[0]指定的是table里面的第一个数。