方法:首先:要学会数码管的显示程序
然后:按键的 *** 作,注意软件的消抖(具体的是延时,10ms左右)。
假设有k1~停表,k2~复位,k3~继续运行
先说停表和继续运行的
停表:如果k1按下,TR0=0;
继续运行:如果k3按下,TR0=1;
复位:直接用硬件复位单片机或者k2按下,数据清零。
要实现数据的循环:只要定时器计数到最大值时,再把最小值赋给它!
我看楼上写的程序不怎么好,而且不容易懂,不是单片机c语言吧,于是自作主张的自己又写了一个,是51单片机的,12MHz晶振。我猜你现在用的是51吧?
#include
#define
uchar
unsigned
char
sbit
Led=P1^0;
uchar
counter;
void
timer1()
interrupt
3
using
1
{
TH1=-50000/256;
TL1=-50000%256;
counter=counter+1;
}
void
main()
{
counter=0;
TMOD=0x50;
TH1=-50000/256;
TL1=-50000%256;
//定时50ms,16位定时器
EA=1;
TR1=1;
while(1)
{
if(counter==20)
{
counter=0;
Led=~Led;
//led灯闪烁
}
}
}
楼主觉得可以的话,一定要给满意噢,若有什么不满意的地方,请继续追问。对啊,中断里面的程序一定要短,中断嘛,本来就是要告诉单片机该做什么的了。
如果是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;
//自己的程序
}}
#include <stdioh>
#include <windowsh>
void main()
{
int _t=60;
while (_t>0)
{
Sleep(1000);
_t--;
}
/
60秒后要执行的语句
/
}
#include<reg51h>
#define uchar unsigned char
uchar pwm=50,cnt;
sbit pluse=P1^0;
sbit keyu=P1^4;
sbit keyd=P1^5;
void t0isr() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
cnt++;
if(pwm>0)
{
if(cnt>100)cnt=0;
if(cnt<=pwm)pluse=1;
else pluse=0;
}
else pluse=0;
}
main()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyu==0)
{
while(keyu==0);
pwm++;
if(pwm>100)pwm=100;
}
if(keyd==0)
{
while(keyd==0);
if(pwm>0)pwm--;
}
}
}
以上就是关于51单片机的定时器程序,c语言编写,使用内部定时器设计一个三位秒表 (秒,十秒,分),显示秒位的变动,全部的内容,包括:51单片机的定时器程序,c语言编写,使用内部定时器设计一个三位秒表 (秒,十秒,分),显示秒位的变动,、请大家给我写一个用单片机c语言变的程序,要求:用定时器实现灯的闪烁、单片机c语言编写产生1秒定时的程序,怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)