⑴ 单片机定时器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);循环左移一位}