当前位置:首页 » 编程语言 » c语言数码管60秒
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数码管60秒

发布时间: 2022-06-27 02:07:58

❶ 求C51单片机汇编语言控制两位数码管60秒倒计时的程序,最好能说明下思路

#include <at89x52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define seg P0
#define sw P2
int tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int dis[]={0,0};
uint X;
uchar Count=0;
uchar sec=60;
void display()
{
int a;
int m=0x01;
dis[0]=sec/10;
dis[1]=sec%10;
for(a=0;a<2;a++)
{
seg=0xff;
seg=tab[dis[a]];
sw=m;
m=_crol_(m,1);
}
}
void TINT0() interrupt 1
{
TL0=-50000%256;
TH0=-50000/256;
if(++Count==20)
{
if(sec>0)sec--;
Count=0;
}
}
void Main()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TL0=-50000%256;
TH0=-50000/256;
while(1)
{
if(sec==0)sec=60;
display();
}

}

❷ 用c语言编程,使51单片机数码管从0显示到60

#include <REGX52.H>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define DataPort P0

#define RS_CLR RS = 0
#define RS_SET RS = 1

#define RW_CLR RW = 0
#define RW_SET RW = 1

#define EN_CLR EN = 0
#define EN_SET EN = 1

sbit RS = P1^3; //定义端口
sbit RW = P1^4;
sbit EN = P1^5;
sbit wx = P2^6;
sbit dx = P2^7;
sbit beep = P2^2;

unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

/*
* 功 能:延时,若干毫秒
* 参 数:毫秒数
* 返回值:无
*/
void DelayMs(unsigned int i) //一个延时函数,这个函数在11.0592M晶振下的延时时间大概为1ms
{
unsigned int j,k;

for(j=i; j>0; j--)
for(k=114; k>0; k--);
}

/*
* 功 能:延时
* 参 数:延时的数量
* 返回值:无
*/
void delay(uint x)
{
uint a,b;
for(a=x; a>0; a--)
for(b=10; b>0; b--);
}

/*
* 功 能:显示计时的秒数
* 参 数:无
* 返回值:无
*/
void display(uchar d2, uchar d1)
{
P0 = table[d2];
dx = 1;
dx = 0;

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

P0 = table[d1];
dx = 1;
dx = 0;

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

}

void main()
{
uchar i, second=0, d1, d2, dat=0xFF;

while(1)
{
DelayMs(1000);
second++;
dat--;
P1 = dat;
if(second == 60)
{
second = 0;
}

d2 = second / 10;
d1 = second % 10;

for(i=50; i>0; i--)
{
display(d2, d1);
}
}
}

❸ 求一个简单的单片机用数码管显示计时60秒的C语言程序,程序一定要带有解释和Proteus 仿真电路图.

/***程序仿真用89c52数码管用共阳极数码管

P0口段选,P3.0和P3.1位选

定时器2用法见网络“T2CON”***/

#include<reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

ucharcodenum[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//共阳极数码管0-9数组以及全灭和“-”符号

uchardatada[2];//定义显示缓存

uintsec;//定义秒

uchara;//显示位选择

//延时子程序

voidd(uinti)

{uintj;

for(;i>0;i--)

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

}

//显示函数

voidprt()

{

da[0]=sec/10;//十位存入显示缓存

da[1]=sec%10;//各位存入显示缓存

P0=num[da[a]];//将要显示的数据付给P0

d(5);//延迟一小段时间

P3<<=1;//P3数据向左移移位

P0=0xff;//消隐

a++;//显示数据指向下一位

if(a>1){a=0;P3=0x01;}//第二个数据扫完,指向第一个数据

}

//定时器中断子函数

timer2()interrupt5

{

staticuchart;

TF2=0;

t++;

if(t==20)//定时够20次即1s

{

t=0;//t清零

sec++;//秒加1

if(sec==60)sec=0;//

}

}

//主函数

voidmain()

{ //

RCAP2H=(65536-50000)/256; //

RCAP2L=(65536-50000)%256; //定时器2定时50MS

TR2=1; //启动定时器2

ET2=1; //打开定时器2中断

EA=1; //开总中断

P3=0x01;

while(1)

{prt(); //显示

}

}

望采纳···

❹ 怎么让一组数码管显示完60秒倒计时后让下一组接着显示,然后以此不断循环,求大神指点,电路和代码是啥

可以用两个二位一体共阴数码管,即为两组。倒计时用定时器定时50ms,采用中断方式,并对中断计数20次就是1秒。用一个变量做秒计数,每一秒减一,即可以实现倒计时了。第一组数码管显示倒计时仿真结果如下。

❺ 使用2个数码管设计一个60秒倒计时C语言程序,要求用定时器中断定时1秒。 仿真元件数码管为7SEG-COM-CATHODE

7SEG-COM-CATHODE为共阴管

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharnum=60,shi,ge;

ucharcodeTAB[]={

0x3F,/*0*/

0x06,/*1*/

0x5B,/*2*/

0x4F,/*3*/

0x66,/*4*/

0x6D,/*5*/

0x7D,/*6*/

0x07,/*7*/

0x7F,/*8*/

0x6F,/*9*/

};

voidT0INTinit()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

voidmain()

{

T0INTinit();

while(1)

{

shi=num/10;

ge=num%10;

P0=TAB[shi];

P2=TAB[ge];

}

}

voidT0INT()interrupt1

{

uchari;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

if(i==20)

{

i=0;

num--;

if(num==0)

num=60;

}

}

❻ 关于51单片机60秒倒计时的c语言程序,delay和dispiay部分分别什么意思啊,具体点

delay(int t)这个是延时子程序,如果采用20M晶振的话,调用一次延时t毫秒。
display()是数码管动态扫描显示子程序,位控位为P3.0、P3.1,段码控制为P1。扫描间隔时间为5毫秒左右。

❼ 急~!!用数码管显示60秒的秒表设计(单片机AT89C51)

;程序如下:

;fosc = 11.0592MHz

SP1 BIT P3.2
LED BIT P3.4
;-------------------------------
ORG 0000H
SJMP START
ORG 000BH
MOV TH0, #4CH
JNB F0, T0_END
DJNZ R5, T0_END
MOV R5, #20
INC R4
CJNE R4, #60, T0_E1 ;最大为59
MOV R4, #0
CLR LED
T0_E1:
CALL DISP
CJNE R4, #5, T0_END ;LED亮5s
SETB LED
T0_END:
RETI
;-------------------------------
DISP:
PUSH ACC
PUSH B
MOV A, R4
MOV B, #10
DIV AB
MOV DPTR, #TABLE
MOVC A, @A + DPTR
MOV P1, A
MOV A, B
MOVC A, @A + DPTR
MOV P2, A
POP B
POP ACC
RET
TABLE:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;-------------------------------
START:
MOV TMOD, #01H
MOV TH0, #4CH
SETB TR0
SETB ET0
SETB EA
M_LOOP:
MOV R4, #0
MOV R5, #20
CALL DISP
WT: JB SP1, $
CALL DELAY
JB SP1, WT
JNB SP1, $
CPL F0
JNB F0, WT
SJMP M_LOOP
DELAY:
MOV R6, #40
DJNZ R7, $
DJNZ R6, $ - 2
RET

END

❽ 红灯亮60秒在数码管倒计数60s;黄灯亮5秒数码管倒计时65s;绿灯亮60秒数码管倒计时60s,用C编写

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint temp,temp1,temp2,num,shi,ge,i,j;
uchar code table[]={0x01,0x67,0x12,0x42,0x64,0x48,0x08,0x63,0x00,0x40};
sbit E1=P0^7;
sbit welay1=P2^6;
sbit welay2=P2^7;
sbit SNL=P2^2;
sbit SNY=P2^1;
sbit SNR=P2^0;
sbit EWL=P2^5;
sbit EWY=P2^4;
sbit EWR=P2^3;
void init()
{
P0=0xff;
P2=0xff;
temp=0;
temp1=0;
temp2=0;
shi=0;
ge=0;
E1=0;
TMOD=0x21;
TH0=0x3c; //50ms
TL0=0xb0;
EA=1;
ET0=1;
TF0=0;
TR0=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}

void display()
{
shi=num/10;
ge=num%10;
P0=table[ge];
welay2=1;
welay1=0;
delay(10);
welay1=1;
P0=table[shi];
welay1=1;
welay2=0;
delay(10);
welay2=1;
}
void time0() interrupt 1 using 1
{
temp++;
temp1++;
TH0=0x3c;
TL0=0xb0;
//display();
TR0=1;
}
void main()
{
init();
while(1)
{
if(temp==0)
{
EWL=0;
SNR=0;
num=31;
temp1=0;
for(i=30;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==600) //
{
EWL=1;
num=6;
j=0;
for(i=12;i>0;i--)
{
j++;
if(j%2==0)
{
num--;
}
temp2=temp;
EWY=!EWY; //灯闪烁
while(temp-temp2!=10)
{
display();
};
}
}
if(temp==720)
{
EWY=1;
EWR=0;
SNR=1;
SNL=0;
num=24;
temp1=0;
for(i=24;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}

}
if(temp==1200)
{
SNL=1;
j=0;
num=6;
for(i=12;i>0;i--)
{
temp2=temp;
SNY=!SNY;
j++;
if(j%2==0)
{
num--;
}
while(temp-temp2!=10)
{
display();
};
}
SNY=1;
EWR=1;
temp=0;
}
}

}

直接修改显示的时间就可以达到要求。

❾ 求C语言程序:数码管60秒倒数

共阴数码管,首先通过小工具将0-9的10个数字的a-f点亮方式定义到数组中.
之后就是定义一个字节的BCD码,4位高为一个数字 0-9 左边,4位低为数字右边.这样只要对这个BYTE值取下标就可以显示出来.思路希望对你有帮助.你这个是静态方式,比较浪费IO口,另外既然P0口拉了,最好P2口也拉一下,不过stc是有强推输出,可以不拉.

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

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

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