① AT89C51单片机60.00到00.00倒计时程序 4位数码管显示 C语...
AT89C51单片机60.00到00.00倒计时程序 4位数码管显示 C语...
黄莺鸣翠柳 紫燕剪春风 莺歌燕舞 一年四季春常在 万紫千红永开花 喜迎新春
② 如何用单片机和数码管制作倒计时表
这是我自己写的代码,修改了我前段时间写的电子钟,在跟老师借的板子上调试成功,你看看参考一下。(还是我第一次写的编程规范化程序,有注释哦)
//******************************************************************
//作者: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单片机试题,写一个用单个数码管显示10秒倒计时的程序,急!!!!!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit an=P2^6;
sbit wei=P2^7;
uchar disp=0;
uchar time=10;
int miao=0;
uchar code dispcode[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段码表
void Timer0Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void main()
{
Timer0Init()
ET0=1; //开启定时器0中断
EA=1;
while(1);//等待中断
}
void time0(void)interrupt 1
{
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
if(disp&1=0)
{
an=1;
P0=dispcode[time%10];
an=0;
wei=1;
P0=0xdf;
wei=0;
}
else
{
an=1;
P0=dispcode[time/10];
an=0;
wei=1;
P0=0xef;
wei=0;
}
disp++;
miao++;
if(miao==1000)
{
miao=0;
if(miao!=0)time--;
}
}
④ 51单片机的程序(c语言版),用数码管进行倒计时。
数码管显示2个数字,共显示2万次。
⑤ 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
⑦ 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单片机30秒倒计时,用数码管显示的,c程序,元件只有at89c51和数码管,没有其他的,
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,num1;tt;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
num=0;
tt=0;
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
//EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR0=1;//启动定时器0
TR1=1;
wela=1;//11101010
P0=0xea;
wela=0;
la=1;
P0=0x3f;
la=0;
while(1)
{
if(num1==25)
{
num1=0;
P1=~P1;
}
if(tt==100)
{
tt=0;
num++;
if(num==16)
num=0;
la=1;
P0=table[num];
la=0;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
void time1() interrupt 3
{
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
num1++;
}
自己发掘吧
⑨ 小白求救,51单片机利用两个数码管实现60秒倒计时
个位数能够显示正常,那么就说明十位数的处理代码出了问题;
给出代码看看吧
⑩ 单片机 at89c51 6位数码管24小时倒计时程序
留个邮箱发给你。