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

单片机数码管动态程序

发布时间:2022-12-29 21:19:19

⑴ 电路如下图请问单片机动态数码管显示C语言程序怎么写呢

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9

unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{

TMOD |=0x01;//定时器设置 10ms in 12M crystal,工作在模式1,16位定时
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打开中断
TR0=1; //打开定时开关

while(1)
{
P0=Dis_Shiwei;//显示十位
P2=0;
delay(300); //短暂延时
P0=Dis_Gewei; //显示个位
P2=1;
delay(300);
}

}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char second,count;
TH0=0xd8; //重新赋值
TL0=0xf0;

count++;
if (count==100) //100x10ms=1S,大致延时时间
{
count=0;
second++; //秒加1
if(second==100)
second=0;
Dis_Shiwei=tab[second/10];//十位显示值处理
Dis_Gewei=tab[second%10]; //个位显示处理

}

⑵ 单片机数码管动态显示

下面是用段选和位选的数码管动态显示程序,可以参照下写法

#include <AT89X51.H>
unsigned char dispbitcnt; //数码管位码扫描变量
unsigned char second;
//秒变量
unsigned char minite;
//分变量
unsigned char hour;
//时变量
unsigned char tcnt;
//秒信号产生变量
unsigned char mstcnt;
//扫描时间变量

const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> <br> <br> 0x92,0x82,0xf8,0x80,0x90};

//0123456789段码
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> <br> <br> 0xef,0xdf};

//123456位码
unsigned char dispbuf[6]={0,0,0,0,0,0};

//缓冲数组

//**************TMR0中断数码管扫描程序*********************
void Timer0() interrupt 1
{

P2=dispcode[dispbuf[dispbitcnt]];//段码
P1=dispbitcode[dispbitcnt];//位码
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;<br> }

tcnt++;
//中断产生秒信号
if(tcnt==244)
{tcnt=0;<br> <br>second++;<br> <br>if(second==60)<br> <br> {second=0;<br> <br> minite++;<br> <br> if(minite==60)<br> <br> {minite=0;<br> <br> <br>hour++;<br> <br> <br>if(hour==24)<br> <br> <br> {hour=0;<br> <br> <br> }

}

}

dispbuf[4]=second%10;

dispbuf[5]=second/10;

dispbuf[2]=minite%10;

dispbuf[3]=minite/10;

dispbuf[0]=hour%10;

dispbuf[1]=hour/10;

}
TMOD=0x01;
TL0=0x10;
TH0=0xf0;

}
///****************1ms延时程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
}

//*************主程序********************
void main(void)
{
TMOD=0x01;

TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;

P1=0x00;
//开段码
P2=0x00;
//开位码
delay_1ms(200);
//延时
delay_1ms(200);
//延时
delay_1ms(200);
//延时
delay_1ms(200);
//延时
P2=0xff;
//关位码

EA=1;
ET0=1;
TR0=1;
while(1);
}
}

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

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

⑷ 单片机数码管动态显示程序最后一位很亮是怎么回事

因为在有参调用中,程序开头有一些计算过程,例如计算要显示的每一位数值,要占用较长的时间,动态扫描到最后一个数码管后重新循环时再次计算程序开头的计算过程,这段时间都是最后一个数码管在显示,所以最后一个数码管显示时间较其他数码管长,比较亮。或者是在主程序中,display()前有一段代码要执行,占用较长时间,效果和前面讲的相同。

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

你想要做单片机有关的动态数码显示程序的话,你可以先下一个proce的破解版,你在上面可以做一个有关数码显示屏程序的一个相关的图。

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

动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选,
p2=tab[1];
//赋值
p3_0=0;
//开第一位显示
for(i=0;i<200:i++);//延时
p3_0=1;
//关第一位显示
p2=tab[2];
p3_1=0;
//开第二位显示
for(i=0;i<200:i++);
p3_1=1;
这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的

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

#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,nn=0;
uchar dat[]={2,0,1,2,1,1,4,5,8,2};
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=4;
switch(number)
{
case 0:P2=0x08;P0=distab[nn];
break;
case 1:P2=0x04;P0=distab[nn+1];
break;
case 2:P2=0x02;P0=distab[nn+2];
break;
case 3:P2=0x01;P0=distab[nn+3];
break;
default:break;
}
nn++;
nn%=7;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}

⑻ 【单片机程序】能让数码管动态显示“0123”一秒后再显示“4567”以此循环

#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
void display(u8 x);//声明显示子函数
u8 t0n; //定时器中断次数
void main()//主程序
{
u8 n;
TMOD=0x01;
TH0 =0x3C;//晶振12M,定时50ms
TL0 =0xB0;
IE =0x82;
TR0 =1;
while(1)
{
display(n);
if(t0n>=20)//1秒到
{
t0n=0;
if(n==0)n=4;
else n=0;
}
}
}
//定时器T0中断服务程序
void T0_isr() interrupt 1
{
TH0 =0x3C;
TL0 =0xB0;
t0n++;
}

⑼ LED数码管动态显示2017的51单片机汇编语言

DAT		EQU33H
SCANLED EQU39H
ORG0000H
LJMPMAIN
ORG0003H
LJMPEXTINT0
ORG001BH
LJMPT1ISR ;扫描显示
ORG0030H
MAIN:
MOVSP,#5FH
MOVTMOD,#10H
MOVTH1,#0ECH
MOVTL1,#078H
MOV33H,#2
MOV34H,#0
MOV35H,#1
MOV36H,#7
SETBTR1
SETBET1
SETBEA
SJMP$
T1ISR:
PUSHACC
CLRTR1
MOVTH1,#0ECH
MOVTL1,#78H
SETBTR1
MOVDPTR,#LEDTAB
T100:
MOVR0,#DAT
MOVA,SCANLED
ADDA,R0
MOVR0,A
MOVA,SCANLED
JNZT101
MOVP2,#01H
SETBDOT
SJMPT1DIS
T101:
DECA
JNZT102
MOVP2,#02H
CLRDOT
SJMPT1DIS
T102:
DECA
JNZT103
MOVP2,#04H
SETBDOT
SJMPT1DIS
T103:
MOVP2,#08H
CLRDOT
T1DIS:
MOVA,@R0
MOVCA,@A+DPTR
JNBDOT,T1DIS1
ORLA,#01H
T1DIS1:
CPLA
MOVP0,A
INCSCANLED
MOVA,SCANLED
CJNEA,#4,T1END
MOVSCANLED,#0
T1END:
POPACC
RETI
LEDTAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

阅读全文

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

热点内容
有服务器地址怎么安装软件 浏览:659
安卓如何完全清除数据 浏览:690
安卓安卓证书怎么信任 浏览:53
服务器被攻击如何解决 浏览:221
学霸变成程序员 浏览:881
c语言编译错误fatalerror 浏览:441
ipv4内部服务器地址怎么分配 浏览:463
java线程安全的方法 浏览:950
重复命令画梯形 浏览:164
在疫情就是命令 浏览:328
自己搭建一个什么服务器好玩 浏览:253
java基础马士兵 浏览:823
完美世界手游如何查看服务器 浏览:859
光遇安卓与ios什么时候互通 浏览:598
js如何运行时编译 浏览:917
引力app在哪里下载 浏览:609
编写app如何得到钱 浏览:801
吉利汽车软件放哪个文件夹安装 浏览:223
多文件编译c 浏览:543
头顶加密后为什么反而更稀疏 浏览:794