⑴ 單片機定時器c程序
//-------------------
//
函數名稱:
void
delay_s(uchar
t)
//
函數功能:
利用定時器延時t秒子程序
//-------------------
delay_s(uchar
t)
{
uchar
count,a;
TMOD=0x10;
//定時器1,模式1
TH0=(65536-50000)/256;
//
定時為50ms
TL0=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(a==t)break;
}
}
void
timer1()
interrupt
3
//定時器1
{
TR1=0;
TH1=(65536-50000)/256;
//
定時為50ms
TL1=(65536-50000)%256;
count++;
if(count==20)
//判斷是否到1秒
{
count=0;
a++;
}
TR1=1;
}
⑵ 關於 單片機定時開關控制 C 語言程序
#include<reg52.h>
#define unchar unsigned char
#define an P2
unchar code date[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
unchar code d[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef};//這是秒的可以閃的編碼char date[4],set=1,sock_min,sock_s,reversion_min,reversion_s,a,
num_1,num_2,s,km1,km2,flog,temp;
int ss,min,xx,yy;
sbit wei_one=P1^0;
sbit wei_two=P1^1;
sbit wei_three=P1^2;
sbit wei_four=P1^3;
sbit set_key=P1^4;
sbit add_key=P1^5;
sbit del_key=P1^6;
sbit move_key=P1^7;
sbit km_sock=P3^0;
sbit km_reversion=P3^1;
void delay(int z) //delay延時函數
{
int i,j;
for(i=0;i<z;i++)
for(j=110;j>0;j--);
}
//初始化函數
void init()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
km_sock=0;
km_reversion=0;
}
//顯示函數
void display()
{
if(set==2) {if(min==0)num_1=min;else num_1=min-1;if(min!=0)num_2=60-s;else num_2=ss;}
if(set==0) {num_1=sock_min;num_2=sock_s;}
if(set==1) {num_1=reversion_min;num_2=reversion_s;}
date[0]=num_1/10;
date[1]=num_1%10;
date[2]=num_2/10;
date[3]=num_2%10;
an=0xff;
wei_one=0;
an=date[date[0]];
delay(5);
wei_one=1; an=0xff;
wei_two=0;
if(s%2>0)
an=date[date[1]];
else
an=d[date[1]];
delay(5);
wei_two=1;
an=0xff; an=0xff;
wei_three=0;
an=date[date[2]];
delay(5);
wei_three=1;
an=0xff; an=0xff;
wei_four=0;
an=date[date[3]];
delay(5);
wei_four=1;
}
void scanf()
{
if(set_key==0)
{
delay(10);
if(set_key==0)
{
while(!set_key)display();
delay(10);
while(!set_key)display();
set++;
if(set==3)set=0;
}
}
//////////////////////////////////////////// set
if(add_key==0&&set==0&&flog==0)
{
delay(10);
if(add_key==0&&set==0)
{
while(add_key==0&&set==0)display();
delay(10);
while(add_key==0&&set==0)display();
sock_min++;
if(sock_min>=60)
sock_min=0;
ss=sock_s;
min=sock_min;
}
}
////////////////////////////////////////////add sock min
if(add_key==0&&set==0&&flog!=0)
{
delay(10);
if(add_key==0&&set==0)
{
while(add_key==0&&set==0)display();
delay(10);
while(add_key==0&&set==0)display();
sock_s++;
if(sock_s>=60)
sock_s=0;
ss=sock_s;
min=sock_min;
}
}
/////////////////////////////////////////////// add sock s
if(add_key==0&&set==1&&flog==0)
{
delay(10);
if(add_key==0&&set==1)
{
while(add_key==0&&set==1)display();
delay(10);
while(add_key==0&&set==1)display();
reversion_min++;
if(reversion_min>=60)
reversion_min=0;
ss=reversion_s;
min=reversion_min;
}
}
//////////////////////////////////////////////// add reversion min
if(add_key==0&&set==1&&flog!=0)
{
delay(10);
if(add_key==0&&set==1)
{
while(add_key==0&&set==1)display();
delay(10);
while(add_key==0&&set==1)display();
reversion_s++;
if(reversion_s>=60)
reversion_s=0;
ss=reversion_s;
min=reversion_min; }
}
////////////////////////////////////////////////add reversion s
if(del_key==0&&set==0&&flog==0)
{
delay(10);
if(del_key==0&&set==0)
{
while(del_key==0&&set==0)display();
delay(10);
while(del_key==0&&set==0)display();
sock_min--;
if(sock_min<0)
sock_min=59;
ss=sock_s;
min=sock_min;
}
}
///////////////////////////////////////////////del sock min
if(del_key==0&&set==0&&flog!=0)
{
delay(10);
if(del_key==0&&set==0)
{
while(del_key==0&&set==0)display();
delay(10);
while(del_key==0&&set==0)display();
sock_s--;
if(sock_s<0)
sock_s=59;
ss=sock_s;
min=sock_min;
}
}
///////////////////////////////////////////////del sock s
if(del_key==0&&set==1&&flog==0)
{
delay(10);
if(del_key==0&&set==1)
{
while(del_key==0&&set==1)display();
delay(10);
while(del_key==0&&set==1)display();
reversion_min--;
if(reversion_min<0)
reversion_min=59;
ss=reversion_s;
min=reversion_min;
}
}
////////////////////////////////////////////////del reversion min
if(del_key==0&&set==1&&flog!=0)
{
delay(10);
if(del_key==0&&set==1)
{
while(del_key==0&&set==1)display();
delay(10);
while(del_key==0&&set==1)display();
reversion_s--;
if(reversion_s<0)
reversion_s=59;
ss=reversion_s;
min=reversion_min;
}
}
//////////////////////////////////////////////////del reversion s
if(move_key==0)
{
delay(10);
if(move_key==0)
{
while(move_key==0)display();
delay(10);
while(move_key==0)display();
flog=~flog;
}
}
}
void disposal()
{
if(km1==1&&temp==0&&km2==0)
{
TR0=0;
km_reversion=0;
/*for(xx=110;xx>0;xx--)
for(yy=3000;yy>0;yy--)
display();*/
km_sock=1;
temp=1;
TR0=1;
}
if(km2==1&&temp==1&&km1==0)
{
TR0=0;km_sock=0;
/*for(xx=110;xx>0;xx--)
{
for(yy=3000;yy>0;yy--)display();
} */
km_reversion=1;
temp=0;
TR0=1;
}
}
void main()
{
init();
while(1)
{
scanf();
display();
disposal();
}
}
//中斷函數
void time0()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
if(km1==0&&km2==0)
{
if(sock_min!=0||sock_s!=0||reversion_min!=0||reversion_s!=0)
{km1=1;ss=sock_s;min=sock_min;}
}
if(min==0&&ss==0&&km1==1&&km2==0)
{
km1=0;
km2=1;
ss=reversion_s;
min=reversion_min;
}
if(min==0&&ss==0&&km1==0&&km2==1)
{
km2=0;
km1=1;
ss=sock_s;
min=sock_min;
}
if(min==0)
{ss--;<br> if(ss<0)<br> ss=0;}
else
s++;//秒
a=0;
}
if(s==60)
{
s=0;
/*if(km1==1&&km2==0&&min==sock_min)
{
min=sock_min;
}
if(km1==0&&km2==1&&min==reversion_min)
{
min=reversion_min;
}*/
min--;
if(min<0)
min=0;
}
}
⑶ 請問單片機C語言定時器程序怎麼寫
你看過匯編嗎?與匯編的格式是一樣的。具體就是先開中斷允許標志位(IE裡面對應的各個位)在設定TMOD工作方式。下一步就是設定初始值了(TH、TL)。設置完這些就可以開定時器了。寫中斷中段函數是是需要另加interrupt 加上一個常數(比如是定時器0就在後面加上1)。我用89S52晶元編過一個定時器程序你參考一下,希望對你有一點幫助。
//功能:感應外界溫度並用數碼管顯示
//時間:2005年6月20日
//設計人:
#include<reg52.h>
#define uchar unsigned char
sbit ad0809_oe=P1^0; //定義各個位
sbit ad0809_start=P1^1;
sbit ad0809_ale=P1^2;
sbit ls595_rclk=P1^3;
sbit ad0809_eoc=P1^5;
sbit ls595_oe=P1^4;
sbit ls595_ser=P3^0;
sbit ls595_srclr=P3^1;
uchar nn,mm;
uchar code tab[]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};
send(uchar); //聲明函數
AD(uchar);
void display(uchar);
void init();
//********普通口輸入數據*****************
send(uchar shu) //普通口串列輸入
{
unsigned char i,k;
k=0x01;
for(i=0;i<8;i++)
{
if(k==(k&shu)) //判斷每位上是否為1
ls595_ser=1;
else
ls595_ser=0;
k<<=1; //左移一位
ls595_srclr=0; //輸入一個上升沿講數送入595中
ls595_srclr=1;
}
}
//*****************595顯示子程序********************
void display(uchar )
{
uchar ge,shi,flge; //ge拆字後個位的存放處shi拆字後十位的存放處flge ℃的存放處
shi=tab[/10]; //拆字
send(shi); //給595送數
ge=tab[%10];
send(ge);
flge=0xb1;
send(flge);
ls595_rclk=0; //上升沿送出數據
ls595_rclk=1;
}
//*******************初始化程序********************
void init() //初始化AD、定時器
{
ad0809_start=0; //Start管教上升沿將AD內部寄存器清零
ad0809_start=1;
ad0809_ale=1; //ALE高電平選擇通道
nn=0;
mm=0;
TMOD=0x01; //定時器初始化
//IE=0x82;
EA=1;
ET0=1;
TCON=0x00;
TL0=(65536-50000)%256; //定時50ms
TH0=(65536-50000)/256;
}
AD(uchar wen)
{
// unsigned char tt=0;
// ad0809_ale=1; //選擇通道
ad0809_start=1;
ad0809_start=0; //start下降沿啟動轉換信號
while(ad0809_eoc==0); //判斷轉換是否結束
ad0809_oe=1; //轉換結束送出轉換數據
wen=P2;
return (wen);
}
//**************中斷服務程序*********************
void tiam0() interrupt 1 using 1 //中斷服務程序
{
TL0=(65536-50000)%256; //定時50ms
TH0=(65536-50000)/256;
nn++;
if(nn==10) //0.5秒M加一
{
mm++;
nn=0;
}
}
//****************主程序***************************
void main()
{
unsigned char bb,aa,cc; //bb=計算後得到溫度,aa=AD輸出數據
unsigned char wen; //wen存放轉換的得到的數據
init();
// wen=17;
ls595_oe=0;
cc=0;
TR0=1;
while(1)
{
aa=AD(wen);
// ad0809_oe=0;
aa=~aa;
bb=aa/4;
if(mm==2)
{
mm=0;
cc=bb;
}
display(cc); //調用顯示子程序
}
}
⑷ 單片機c語言編寫產生1秒定時的程序,怎麼寫
如果是51單片機的話其實很簡單的,這里假設晶振頻率是12M(一般都是的),你可以選用定時器0,工作在工作狀態2,因為這個狀態下裝入初始值幾乎不需要時間,所以定時精確,也就是8位預置數狀態,將初始值設為6,這樣每次定時就是250微秒,在中斷程序中定義一個靜態變數,每次中斷加一,這樣當這個變數值為4000時就剛好是1S鍾。
關鍵程序是:
void main()
{
TMOD=OX02;
EA=1;
ET0=1;
TH0=0X06;
TL0=0X06;
while(1);
}
void timer0() interrupt 1
{
static unsigned int times=0;
times++;
if(times==4000)
{
times=0;
//自己的程序
}}
⑸ AT89C51單片機 用定時器1,方式0定時1s的C語言程序怎麼寫
#include
<reg52.h>
#define
uint
unsigned
int
#define
uchar
unsigned
char
uchar
flag;
void
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void
timer0()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag++;
if(flag==20)//當定時到1秒時執行花括弧裡面的語句
{}
}
這是利用T0計時的,如果是T1隻要把TMOD=0x01改成TMOD=0x11;把interrupt
1
改成interrupt
3
即可
⑹ 51單片機定時中斷C語言的寫法步驟,可追加分數
程序說明:51單片機定時器0工作於方式一,定時50ms中斷一次
晶振為12M
#include
void
main
{
TOMD
=
0X01;
//配置定時器0工作於方式一
TH1
=
(65536-50000)/256;
//高八位裝入初值
TL1
=
(65536-50000)%256;
//低八位裝入初值
ET0
=
1;
//開定時器0中斷
EA
=
1;
//開總中斷
TR0
=
1;
//啟動定時器0
while(1)
{
;
}
}
void
Timer0_int()
interrupt
1
{
//重新裝初值
TH1
=
(65536-50000)/256;
//高八位裝入初值
TL1
=
(65536-50000)%256;
//低八位裝入初值
}
/***************************************************************************************************************/
上面是比較好理解的。如果實在要求簡潔的話,看下面的,跟上面功能一樣
#include
void
main
{
TOMD
=
0X01;
//配置定時器0工作於方式一
TH1
=
0x3c;
//高八位裝入初值
TL1
=
0xb0;
//低八位裝入初值
IE
=
0x82;//開總中斷並開定時器0中斷
TR0
=
1;
//啟動定時器0
while(1)
{
;
}
}
void
Timer0_int()
interrupt
1
{
//重新裝初值
TH1
=
0x3c;
//高八位裝入初值
TL1
=
0xb0;
//低八位裝入初值}
⑺ 利用51單片機定時器編寫一個C語言程序,實現一個發光二極體定時亮、滅,要求亮一秒、滅一秒交替閃爍不
利用51單片機定時器編寫一個C語言程序,實現一個發光二極體定時亮、滅,
要求亮一秒、滅一秒交替閃爍不止。最好有硬體電路簡圖
電路與程序如下:
晶振頻率,採用 12MHz。
定時器 0,定時 8ms。
中斷 125 次,即為一秒。令 IO 介面取反即可。
⑻ 單片機定時器中斷程序,C語言程序設計
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar keyval;
uchar led1=0xfe,led2=0x55,led3=0x0f;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(keyval)
{
case 1:
P0=led1;
led1=_crol_(led1,1)
break;
case 2:
P0=led2;
led2=~led2;
break;
case 3:
P0=led3;
led3=~led3;
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
keyval++;
keyval%=4;
}
}
}
⑼ 求單片機定時器簡單程序(C語言)詳解。不勝感激~
用定時器0中斷做流水燈,程序如下:#include<reg52.h>#include<intrins.h> //包含_crol_()循環左移函數
unsigned char temp,count;void init() //初始化函數{ TMOD=0x01;//設置定時器0為工作方式1 TH0=(65536-50000)/256;//裝初值,高8位 TL0=(65536-50000)%256;//裝初值,低8位 EA=1;//開總中斷 ET0=1;//開定時器0中斷 TR0=1;//啟動定時器0 temp=0xfe; count=0;//記數值清0}void main(){ init(); while(1){ P1=temp;}}void timer0() interrupt 1 using 1 //定時器0中斷函數{ TH0=(65536-50000)/256;//重裝初值,同上 TL0=(65536-50000)%256; count++;//計數值加1 if(count==10)//500ms{ count=0;//計數值清0 temp=_crol_(temp,1);循環左移一位}