导航:首页 > 操作系统 > 51单片机数码管动态显示程序

51单片机数码管动态显示程序

发布时间:2023-07-21 11:27:18

Ⅰ 51单片机 让数码管自动显示0至9的C程序。有没有比这个更简单的

可以通过代码优化的方式来简化代码。

一、设置延时函数

延时函数在单片机中有着让现实延时的能力,本程序中可以通过采用for循环方式进行延时,具体代码如下:

void delay()

uinti,j;

for(i=100;i>0;i--)

for(j=1000;j>0;j--);

二、设置数码管显示数组

数组定义简单,而且访问很方便。所有元素类型相同,在数码管显示程序中可以让程序代码减少。数组代码如下:

chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};

三、设置数码管显示循环

数码管显示循环可以不用编写一次又一次的数码管显示代码,既方便又简洁。具体代码如下:

for(inti=0;i<10;i++)

P0=a[i];

delay();

(1)51单片机数码管动态显示程序扩展阅读

单片机程序进行简化可以查看是否有反复出现的代码序列,整合成循环进行更改。同一类型且用法相同的变量可以整合成数组,方便对各个内容进行访问。有特定功能的代码段可以定义一个函数进行访问。

注意:用C51语言编辑的单片机程序与普通C语言不同,C51语言中的数据类型和标准c中的数据类型不同。

Ⅱ 51单片机如何利用4个七段数码管采用动态显示显示4位数字,如2035

//***************************************
//显示函数 函数名:display56()
//***************************************
//变量定义:
unsigned char qian,,shi,ge; //定义显示缓冲区
unsigned char table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa7};
//表:共阳数码管 0 1 2 3 4 5 6 7 8 9 c
//延时子函数,短暂延时
void delay56()
{
unsigned char i56=210;
while(i56--);
}
void display56()
{
P0=table[qian]; // 查得千位,送P0
SMG_q=0; // 打开千位数码管
delay56(); // 延时
P0 = 255; // 防止数码管脏乱
SMG_q=1; // 关闭数码管
P0=table[];// 选择百位数码管
SMG_b=0;
delay56(); //延时
P0 = 255;
SMG_b=1; //
P0=table[shi];// 选择十位数码管
SMG_s=0;
delay56(); //
P0 = 255;
SMG_s=1; //
P0=table[ge];//选择个位数码管,
SMG_g=0;
delay56(); //
P0 = 255;
SMG_g=1; //
}
你想显示什么,分别为qian,,shi ,ge

Ⅲ 51单片机数码管显示的程序是什么

#include //52系列单片机头文件x0dx0a#define uchar unsigned char //宏定义x0dx0a#define uint unsigned intx0dx0asbit la=P2^6; //申明u1锁存器的锁存端x0dx0asbit wela=P2^7; // u2x0dx0auchar num1,num2;x0dx0auchar code table[]={ //数组定义x0dx0a 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,x0dx0a 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};x0dx0auchar code aable[]={ //位选数组定义x0dx0a 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};x0dx0a void delays(uint); //子函数申明x0dx0ax0dx0a void main() x0dx0a{x0dx0a while(1)x0dx0a {x0dx0a for(num1=0;num1<48;num1++)//6个数循环显示x0dx0a {x0dx0a wela=1;//打开u2锁存端x0dx0a P0=aable[num1%6];//送入位选信号x0dx0a wela=0;//关闭u2锁存端x0dx0a //delays(1);x0dx0a la=1;//打开u1锁存端x0dx0a P0=table[num1%16];//送入段选信号x0dx0a la=0;//关闭u1锁存端x0dx0a delays(1);x0dx0a }x0dx0a }x0dx0a}x0dx0a/*---------主函数-----------------------------------------------*/x0dx0ax0dx0avoid delays(uint xs)x0dx0a{x0dx0a uint i,j,k;x0dx0a for(i=xs;i>0;i--)x0dx0a for(j=1000;j>0;j--)x0dx0a for(k=110;k>0;k--);x0dx0a}x0dx0a/*----------------延时程序-----------------------------------------------*/

Ⅳ 51单片机显示八位数码管的C语言程序

1、最开始,我们先打开keil。

Ⅳ 51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示

1、首先,要把代码写好,点亮数码管。

Ⅵ 运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序

#include<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
count;
uint
disnum;
sbit
la=P2^6;
sbit
wela=P2^7;
uchar
code
table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
display(uchar,uchar,uchar);
delay(uchar);
void
main()
{
EA=1;
ET1=1;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1)
{
if(count==20)
{
count=0;
//
if(disnum==1000)
//
disnum=0;
disnum++;
}
display(disnum/100,disnum%100/10,disnum%100%10);
}
}
void
tim1()
interrupt
3
using
3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
}
display(uchar
,uchar
shi,uchar
ge)
{
P0=table[];
la=1;
la=0;
P0=0xfe;
wela=1;
wela=0;
delay(1);
P0=table[shi];
la=1;
la=0;
P0=0xfd;
wela=1;
wela=0;
delay(1);
P0=table[ge];
la=1;
la=0;
P0=0xfb;
wela=1;
wela=0;
delay(1);
}
delay(uchar
x)
{
uchar
a,b;
for(a=x;a>0;a--)
for(b=255;b>0;b--);
}
//你自己看一下,有不对的就改点.别忘了给分啊

Ⅶ 51单片机电子钟程序数码管显示

#include<reg51.h>

#define uchar unsigned char

sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;
uchar shi20,shi10,fen20,fen10,miao20,miao10,new,ok=1,wei;
unsigned int pp;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
{
la=0;
P0=table[shi2];
la=1;
la=0;

wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);

P0=table[shi1]|0x80;
la=1;
la=0;

P0=0xfd;
wela=1;
wela=0;
delay(5);

P0=table[fen2];
la=1;
la=0;

P0=0xfb;
wela=1;
wela=0;
delay(5);

P0=table[fen1]|0x80;
la=1;
la=0;

P0=0xf7;
wela=1;
wela=0;
delay(5);

P0=table[miao2];
la=1;
la=0;

P0=0xef;
wela=1;
wela=0;
delay(5);

P0=table[miao1];
la=1;
la=0;

P0=0xdf;
wela=1;
wela=0;
delay(5);
}

void keyscan0()
{
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xbb:
ok=0;
break;

case 0x7b:
ok=1;
break;
}
}
}
}

void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
wei++;
break;

case 0xde:
key=1;
wei++;
break;

case 0xbe:
key=2;
wei++;
break;

case 0x7e:
key=3;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
wei++;
break;

case 0xdd:
key=5;
wei++;
break;

case 0xbd:
key=6;
wei++;
break;

case 0x7d:
key=7;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
wei++;
break;

case 0xdb:
key=9;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
}

void main()
{
TMOD=0x01;

TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
ET0=1;
EA=1;

while(1)
{ keyscan0();

if(ok==1)
{ TR0=1;
wei=0;

if(pp==20)
{ pp=0;
m++;
if(m==60)
{
m=0;
f++;
if(f==60)
{
f=0;
s++;
if(s==24) //为24h一个循环,若要12h,只需在此改为12即可。
{
s=0;
}
}
}
}

a0=s%10;
a1=s/10;
b0=f%10;
b1=f/10;
c0=m%10;
c1=m/10;
display(a1,a0,b1,b0,c1,c0);
}
else
{ TR0=0;
keyscan();
if(key!=10)
{

switch(wei)
{
case 1: if(key<3) //小时最高位为2
a1=key;
else
wei--;
break;
case 2: if(a1==1|a1==0)
a0=key;
else
if(key<5)
a0=key; //当小时最高位为2时,低位最高为4
break;
case 3: if(key<7) //分钟最高位为6
b1=key;
else
wei--;
break;
case 4: b0=key; break;
case 5: if(key<7) //秒最高位为6
c1=key;
else
wei--;
break;
case 6: c0=key; break;
}
key=10;
}
m=c1*10+c0;
f=b1*10+b0;
s=a1*10+a0;
display(a1,a0,b1,b0,c1,c0);
}
}
}

void time0() interrupt 1
{ TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
}

Ⅷ 51单片机的共阴数码管怎么显示数字(c语言)

要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。

以显示数字“0”为例,c语言程序如下:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

//数码管的段码编码

Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main(){//主函数

P0 = table[0];//显示0,大家可以修改里面的数据。

while(1);//程序不再执行其他步骤;

}

(8)51单片机数码管动态显示程序扩展阅读:

数字0-9的对应段码:

数字0 0x3f

数字1 0x06

数字2 0x5b

数字3 0x4f

数字4 0x66

数字5 0x6d

数字6 0x7d

数字7 0x07

数字8 0x7f

数字9 0x6f

阅读全文

与51单片机数码管动态显示程序相关的资料

热点内容
安卓国服光遇小王子季节什么时候结束 浏览:537
恢复的音乐在哪个文件夹 浏览:595
qq传输文件夹压缩包 浏览:911
sha1加密算法java 浏览:232
单片机ds1302程序 浏览:738
杜比压缩开还是关怎样判断 浏览:366
对象类型转换java编译和运行 浏览:284
行政命令是什么 浏览:371
android调用系统邮件 浏览:33
测温软件app是如何实现的 浏览:585
江苏服务器机房按需定制云主机 浏览:639
c程序员笔试 浏览:694
excel怎么引用统一文件夹 浏览:249
怎么把微信抖音加密 浏览:304
android滑动进度条 浏览:834
javagmt转换 浏览:826
linux查看snmp 浏览:24
ug80车床编程 浏览:518
怎么加速python计算素数 浏览:243
腰椎第五节压缩性骨折 浏览:93