❶ 单片机 at89c51 6位数码管24小时倒计时程序。怎么办
"#include<reg51.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
hour,min,sec;
uint
count;
uchar
code
tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar
code
add[6]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
/*************************延时一毫秒*********************/
void
delay1ms(void)
{
unsigned
char
a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
/***************定时器0中断函数,用于计时****************/
void
timer0(void)interrupt
1
{
TH0=0x00;
TL0=0x38;
counter--;
if(counter==0)
{
sec--;
if(sec==-1)
{
sec=59;
min--;
if(min==-1)
{
min=59;
hour--;
if(hour==-1)
{
hour=23;
}
}
}
}
}
/*****************************主函数***********************/
void
main()
{
uchar
i;
uchar
display[6];
counter=5000;
sec=min=59;hour=23;
TMOD=0x02;
TH0=0x00;TL0=0x38;
ET0=1;TR0=1;
EA=1;
while(1)
{
display[0]=hour/10;
display[1]=hour%10;
display[2]=min/10;
display[3]=min%10;
display[4]=sec/10;
display[5]=sec%10;
for(i=0;i<8;i++)
{
P0=tab[display[i]];
P2=add[i];
delay1ms();
P2=0xff;
}
}
}"
❷ 单片机数码管倒计时结束 LED小灯亮 这段程序怎么写呢
首先进行位定义 如果led接在p1.0口 可以sbit led=P1^0;然后在定时器sec=0后面加语句led=~led;
❸ 单片机 at89c51 6位数码管24小时倒计时程序
留个邮箱发给你。
❹ 做一个单片机程序,实现数码管动态显示15秒的倒计时
51单片机的15秒倒计时是比较简单的。
至于显示就更简单了。因为你使用的是数码管。所以不需要设置字模块。另外观看电路发现是使用译码器的。就更简单了。至于程序。网上搜素。会有一大把。至于用不用中断。完全看你的需要。如果只是单纯的倒计时是可以不用的最。
❺ 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
❼ 如何用单片机和数码管制作倒计时表
这是我自己写的代码,修改了我前段时间写的电子钟,在跟老师借的板子上调试成功,你看看参考一下。(还是我第一次写的编程规范化程序,有注释哦)
//******************************************************************
//作者:cheungman
//日期:2006-9-23
// 本程序为倒计时程序,用AT89S51,晶振为11.0592MHz
// P2作为数码管的数据输入,P1作为数码管的控制位
//******************************************************************
#include <at89x51.h>
unsigned int time;
unsigned char second10, second1,minute10,minute1;
unsigned char count1=59,count2=59; //定义分倒计59分 钟,秒倒计59秒
//周老师的开发板上的数码管字型码(加点的)
unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};
//周老师的开发板上的数码管字型码(不加点的)
unsigned char code tab1[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //共阴字型码
void delay(unsigned char i) //数码管动态显示的延时子程序
{
unsigned char j;
while((i--)!=0)
{
for(j=123;j>0;j--);
}
}
void display(second10, second1,minute10,minute1) //显示子程序
{
P1=0x04;
P2=tab1[minute10];
delay(1);
P1=0x08;
P2=tab[minute1];
delay(1);
P1=0x10;
P2=tab1[second10];
delay(1);
P1=0x20;
P2=tab1[second1];
delay(1);
}
main()
{
TMOD=(TMOD & 0xf0) | 0x02; //T0工作模式是方式2
TH0=0x06; //定义初始值为0.06ms,计时0.256ms-0.06ms=0.25ms
TL0=0x06;
TR0=1; //开启T0计时
EA=1;
ET0=1;
while(1)
{
display(count1/10,count1%10,count2/10,count2%10);
}
}
void timer0() interrupt 1 using 0 //T0中断
{
TH0=0x06;
TL0=0x06;
time++;
if(time==4000) //4000*0.25ms=1000ms=1s
{
time=0;
count1--;
if(count1==0)
{
count1=59;
count2--;
if(count2==0)
{
count2=59;
}
}
}
}
❽ 51单片机的程序(c语言版),用数码管进行倒计时。
数码管显示2个数字,共显示2万次。
❾ AT89C51单片机60.00到00.00倒计时程序 4位数码管显示 C语...
AT89C51单片机60.00到00.00倒计时程序 4位数码管显示 C语...
黄莺鸣翠柳 紫燕剪春风 莺歌燕舞 一年四季春常在 万紫千红永开花 喜迎新春
❿ 在89c51单片机中实现2:00:00~0:00:00的两分钟倒计时,并在五个数码管上显
#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar
u8ds[5];//数码管显示缓存
codeu8w[]={0x01,0x02,0x04,0x08,0x10,}; //位码 共阳
codeu8d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//断码
voiddispaly(){//显示函数
staticu8a;
if(++a>4)a=0;
P0=0xff;
P2=w[a];
P0=d[ds[a]];
}
voidinit() //初始化函数
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
u16js_s=60*100*2;
u16js_ms=0;
voidmain()//主函数
{
init();
TR0=1;
while(1){//将一个每隔0.01s加1的变量通过除法得到分、秒,由于用到了大量除法运算,效率不高,但很简单,部分运算可以再简化
ds[0]=js_s/(60*100)%60%10;//分
ds[1]=js_s/100%60/10; //秒十位
ds[2]=js_s/100%60%10; //秒个位
ds[3]=js_s%100/10; //0.1s位
ds[4]=js_s%100%10; //0.01s位
}
}voidtimer0()interrupt1//1ms定时器
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dispaly();
if(++js_ms>=10){//10ms
js_ms=0;
if(js_s>0)js_s--;
}
}