导航:首页 > 操作系统 > 单片机两位数码管几个倒计时循环

单片机两位数码管几个倒计时循环

发布时间:2022-11-01 07:29:54

单片机共阴极两位数码管动态显示15秒倒计时

没有具体的原理图,所以就从原理上说明一下吧,首先应该先根据原理图推出每个数码管每个数字对应的8位驱动信号类型,既然是共阴极,那么如果给数码管对应的引脚置1,就会让该位发光,这样就可以推出从0到9的数码管驱动序列,如果是以一个51单片机的一个P0口为例,可以编成八位序列的形式以便赋值,比如0xff等,这样编一个数组。data[9]={//九位数据的内容};以便在主程序中应用。
主程序中实现的过程应该如下(假设是由P0和P1口实现):
while(1)
{
P0=data[1];
P1=data[5];
delay(1);//delay是延时函数,此子函数可以用空循环的形式编写,以实现1s的延时
P0=data[1];
P1=data[4];
delay(1);
。。。。。。以此类推
}
这样就会实现无限循环的15s倒计时

㈡ 单片机100秒倒计时程序(两位数码管,设置复位和开始两个按钮)

简单说两句,这个也不是很难,有很多种方案,说一个吧,首先是两位数码管的驱动,可以选择单片机带max7219然后外扩两个led数码管,硬件连接既简单也成熟,并且单片机驱动程序也是很成熟的,这样通过程序可以随时改变数码管显示,然后就是复位键和开始键,可以使用中断或查询方式,如果是中断,直接将其连接到外部中断和1上,如果是查询直接连到单片机的两个GPIO上,最好做个防抖动电路,防止多次运行,具体程序应该也不是很困难,呵呵,就是有点麻烦。

㈢ 求C51单片机汇编语言控制两位数码管倒计时程序,从60秒到30秒再到90秒并循环倒计时显示。

从60秒到30秒再到90秒并循环倒计时显示。
----
有点不好理解。

从60秒到30秒,看来,是倒计时。
到了30之后,怎么办?是立即改为90吗?
到了90之后,再怎么办?是立即改为60吗?

㈣ 51单片机编程2位数码管倒计时,从10秒开始每隔一秒减一当减到零有重复回到10秒

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//主程序
void main()
{
P0=0x06; //显示10
P2=0x3f;
i=0;
Second_Counts=100;
TMOD=0x01; //定时器0方式1
TH0=(65536-50000)/256; //定时器0: 5ms
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1
while(1) ;
}
//T0中断函数
void DSY_Refresh() interrupt 1
{
TH0=(65536-50000)/256; //恢复定时器0初值
TL0=(65536-50000)%256;
if(++i==2) //50ms*2=0.1s转换状态
{
i=0;
Second_Counts--;
P0=DSY_CODE[Second_Counts/100];
P2=DSY_CODE[(Second_Counts/10)%10];
if(Second_Counts<=-1) Second_Counts=100; //显示10
}
}

㈤ 51单片机接2个led数码管,怎么让数码管倒计时

先看看下面程序,看懂了,就知道咋编了
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a , b=0;
sbit wei1=P1.0;
sbit wei2=P1.1;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void display( uchar a)) /显示子程序
{
P0= table[a/10];//十位
wei1=1;
Delay1ms(2) ;
wei1=0;
P0= table[a%10];//个位
wei2=1;
Delay1ms(2) ;
wei2=0;
}
void main(void )//主程序
{
TMOD=0x01;// 定时器1工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
display(b);
}
}
//中断子程序
void Timer0(void) interrupt 1

{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)//20次是1 秒
{ a=0;b++;}
if(b==60)
{ b=0;}
}

㈥ 求单片机数码管倒计时程序

#include<reg52.h>
#include <intrins.h> //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int sbit d1=P2^0; sbit key1=P0^4;
sbit SDATA_595=P0^0; //串行数据输入 ----接板卡上的SPI 数据信号输入端
sbit SCLK_595=P0^1; //移位时钟脉冲(输入口) ---接板卡上的SPO----串行时钟线----SHcp移位时钟信号输入端
sbit RCK_595=P0^2; //输出锁存器控制脉冲 ----接板卡上SPK STcp锁存信号输入端
uchar code an[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar num=60;
void delay(uint z);
void aa595_in(uchar Data) {
uchar i;
for(i=0;i<8;i++)
{SCLK_595=0; Data<<=1; SDATA_595=CY;
SCLK_595=1; SCLK_595=0;
}
}
void a595_in(uchar Data) {
uchar i;
for(i=0;i<8;i++) {
SCLK_595=0; Data<<=1; SDATA_595=CY;
SCLK_595=1; SCLK_595=0;
}
}
void aa595_out(void) {
RCK_595=0;
_nop_(); _nop_();
RCK_595=1;
_nop_(); _nop_();
RCK_595=0;
}
void main() {
uchar ge,shi;
while(1) {
if(key1==0) {
delay(10);
if(key1==0)
{d1=0; num--;
if(num==0)
num=60;}
while(!key1);//松手检测
delay(10);//延时10ms
while(!key1);//再松手检测
}
else d1=1;
// aa595_in(an[num]);
// aa595_in(wei[3]);
shi=num/10;
ge=num%10;
a595_in(an[shi]);
aa595_in(wei[3]);
aa595_out();
delay(10);
aa595_in(an[ge]);
aa595_in(wei[2]);
aa595_out();
delay(10);}
}
void delay(uint z) {
uint x,y;
for(x=100;x>0;x--) for(y=z;y>0;y--);
}//延时子程序,延时Zms

㈦ keil写程序 单片机二位数码管显示倒计时

#include<reg52.h>
#define uchar unsigned char
#define an P0 //共阴数码管的阳极端口

sbit wei1=P2^4; //共阴数码管的阳极端口,我的是四位的,下面语句中把1,2关了,只用到了3,4。
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;

uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0~9的十六进制码

void delay(uchar xms) //软件延时
{
int i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}
void display(int tens,ones) //用来显示数字的函数,显示此时的十位,个位。
{
int i,j;
for(i=2;i>0;i--)//通过改变i和j的值,可以改变计时时间。
for(j=50;j>0;j--)
{
wei3=1;//扫描原理。
wei4=0;
an=num[tens];
delay(5);
wei3=0;
wei4=1;
an=num[ones];
delay(5);
}
}
void main()
{
int onesp=0,tensp=0;//定义ones place和tens place。
wei1=0;
wei2=0;
while(1)
{
for(tensp=9;tensp>=0;tensp--)
{
for(onesp=9;onesp>=0;onesp--)
{
display(tensp,onesp);//调用函数显示此时的数字。
}
}
}
}
这个程序测试可用,从99计数到00。只用了比较简单知识,不涉及定时器和系统中断。不懂可以追问。

㈧ 求两位数码管显示一个倒数时间的单片机程序,比如显示从99到0

//两位数码管显示倒计数99~00,51单片机。
#include<reg52.h> // 倒计数
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar ,shi;
uint a1,a2;
sbit D1=P3^0; // 位选1 P1口段码输出
sbit D2=P3^1; // 位选2
sbit key=P3^7; // 启动/停止
bit y ;
void main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
=0;
shi=0;
while(1)
{
if(key==0)
{
}
}
}
void timer0()interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a1++;
y = ~y;
if(a1==100)
{
a1=0;
if(key==1) a2--;
if(a2>=100) a2=99;
}
D1 = 1; D2 = 1;
if(y==1)
{
P1=table[a2/10];
D1=0;
}
else
{
P1=table[a2%10];
D2=0;
}
}

㈨ 小白求救,51单片机利用两个数码管实现60秒倒计时

个位数能够显示正常,那么就说明十位数的处理代码出了问题;

给出代码看看吧

㈩ 单片机交通灯数码管多次倒计时

这个问题单片机交通灯数码管多次倒计时,可以参考下我之前的回答帮助

具体的,你看下BJ的网络空间

ES://lsls03BJ

阅读全文

与单片机两位数码管几个倒计时循环相关的资料

热点内容
电脑盘文件夹如何平铺 浏览:265
相机卡满了没文件夹 浏览:747
如何批量快速压缩视频 浏览:432
我的世界如何加入ice服务器 浏览:873
兄弟cnc编程说明书 浏览:204
php闪电入门教程学习 浏览:152
金岳霖逻辑pdf 浏览:938
linuxtomcat线程 浏览:77
pboc长度加数据加密 浏览:187
英雄联盟国际服手游怎么下安卓 浏览:297
程序员的思路 浏览:234
只能用命令获得的四种方块 浏览:358
怎么用命令方块防止开创造 浏览:807
扫描版的pdf 浏览:790
编程猫怎样做3d游戏 浏览:207
怎么查找云服务器上的ftp 浏览:156
我的世界服务器如何注册账号 浏览:934
统计英文字符python 浏览:424
linux信息安全 浏览:910
压缩机接线柱爆 浏览:1001