❶ 單片機 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--;
}
}