51c语言计时函数 c语音计时器

51单片机C语言中delay函数是怎么定义和使用的?

定义一个延时xms毫秒的延时函数

成都创新互联公司主要从事网站建设、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务南票,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

void delay(unsigned int xms) // xms代表需要延时的毫秒数

{

unsigned int x,y;

for(x=xms;x》0;x--)

for(y=110;y》0;y--);

}

使用:

void Delay10us(uchar Ms)

{

uchar data i;

for(;Ms》0;Ms--)

for(i=26;i》0;i--);

}

i=[(延时值-1.75)*12/Ms-15]/4

扩展资料

1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。

2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好。

3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。

c51定时计数C语言代码

#includereg51.h

#includeINTRINS.h

#define u16 unsigned int

#define u8 unsigned char

/*********************************************************/

u8 ds[3]; //数码管显示缓存

//共阳

code u8 w[]={0x01,0x02,0x04,0x08}; //位码

code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//断码

void dispaly(){//显示函数

static u8 a;

if(++a=3)a=0;

P0=0xff;

P2=w[a];

P0=d[ds[a]];

}

/****************************************/

void init() //初始化函数

{   TMOD=0x01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

EA=1;

ET0=1;

}

u16 count=0; //计数

u16 V=0;//速度

u16 js;//计时

u8 mc=P1^1;//脉冲引脚

u8 tt=0xff;

void smmc(){

tt=1;

if(mc)tt|=0x01;

if((tt0x03)==0x02){//下降沿脉冲

if(count65535)count++;

}

}

/***********************************/

void main()//主函数

{

init();//系统初始化

TR0=1; //定时器开始计时

while(1){

ds[0]=V/100%10; //计数送到数码管显示缓存中

ds[1]=V/10%10;

ds[2]=V%10;

smmc();

if(js=10000){//10s

js=0;

V=4*count/10+2;//计算速度

count=0;

}

}

}

/****************************/

void timer0() interrupt 1//1ms定时器

{   

TH0=(65536-1000)/256;//重载初值

TL0=(65536-1000)%256;

dispaly();//显示

js++;

}

基于51单片机的999倒计时C语言程序。

/*************************************

要求是能进行9999秒倒计时

用C语言实现

*************************************/

#includeat89X51.h

#define uchar unsigned char

#define uint unsigned int

uchar num_qian,num_bai,num_shi,num_ge;//定义千位,百位,十位,个位。

uint time;//要显示的时间0~9999

uint tcnt;//计时单元

//*****************//

//以下是端口定义

//*****************//

sbit key_qian=P1^0;//按键"千加1"

sbit key_bai =P1^2;//按键"百加1"

sbit key_shi =P1^4;//按键"十加1"

sbit key_ge =P1^6;//按键"个加1"

sbit laba =P3^1;//喇叭

void delay(unsigned int z)//1毫秒延时子函数

{

unsigned int x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

//*****************//

//以下是七段数码管驱动程序

//*****************//

/**************************************************

** 功能描述: 中断接受字符串驱动程序

**占用引脚资源 P30

**占用系统资源 串口中断;中断向量4

***************************************************/

#define DUAN P0

#define WEI P2

unsigned char code dispcode[]=

{

0x3F,/*0*/

0x06,/*1*/

0x5B,/*2*/

0x4F,/*3*/

0x66,/*4*/

0x6D,/*5*/

0x7D,/*6*/

0x07,/*7*/

0x7F,/*8*/

0x6F,/*9*/

}; //共阴段码表

//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-

uchar code dispbitcode[]=

{0xef,0xdf,0xbf,0x7f}; //共阴位码表

uchar dispbuf[4],dispcount;//开辟四个显示缓冲区

void ledinit()/***初始化子函数,定时器0刷新显示内容***/

{

TMOD|=0x01; // 定时器0方式1

TH0=(65536-5000)/256; //定时器16位模式

TL0=(65536-5000)%256; //溢出时间:5ms

TR0=1; //开启定时器0

ET0=1; //使能定时器0

EA=1; //系统使能

}

void leddisp()//固定显示某些数字

{

dispbuf[0]=time/1000;

dispbuf[1]=time%1000/100;

dispbuf[2]=time%100/10;

dispbuf[3]=time%10;

}

void keytest()//按键检测程序

{

if(!key_qian)//如果千位按键

{

delay(5);//5毫秒延时去抖

if(!key_qian)//如果千位按键的确按下了

{

num_qian++;//千位数字加一

while(!key_qian);//等待按键松开

}

time+=num_qian*1000;//千位数字加1

}

if(!key_bai)//如果百位按键

{

delay(5);//5毫秒延时去抖

if(!key_bai)//如果百位按键的确按下了

{

num_bai++;//百位数字加一

while(!key_bai);//等待按键松开

}

time+=num_bai*100;//百位数字加1

}

if(!key_shi)//如果十位按键

{

delay(5);//5毫秒延时去抖

if(!key_shi)//如果十位按键的确按下了

{

num_shi++;//千位数字加一

while(!key_shi);//等待按键松开

}

time+=num_shi*10;//十位数字加1

}

if(!key_ge)//如果千位按键

{

delay(5);//5毫秒延时去抖

if(!key_ge)//如果个位按键的确按下了

{

num_qian++;//千位数字加一

while(!key_ge);//等待按键松开

}

time+=num_ge;//个位数字加1

}

}

void main()//主程序

{

ledinit();//数码管中断初始化,定时器0刷新显示内容

while(1)//大循环

{

if((!key_qian)||(!key_bai)||(!key_shi)||(!key_ge))//如果四个按键中的任何一个被按下

keytest();//执行按键检测程序

leddisp();//不断的刷新显示内容

}

}

//*************************************************

//以下是定时器0刷新数码管显示内容驱动程序

//*************************************************

/**************************************************

** 功能描述: 七段数码管驱动程序

**占用引脚资源: 数码管段选,数码管位选

**占用系统资源T0

***************************************************/

void t0(void) interrupt 1 //using 0

{

TH0=(65536-5000)/256; //5ms中断

TL0=(65536-5000)%256; //16位定时器模式

WEI=0xff;//关位选

DUAN=dispcode[dispbuf[dispcount]]; //段选

WEI=dispbitcode[dispcount]; //开位选

dispcount++;

if(dispcount==5)

dispcount=0;

tcnt++; //计数个数加一

if(tcnt==5*200)//满足1S了

{

tcnt=0;//计数个数归零

time--;//时间减一

if(time==0)//时间

while(1);

}

if(time10)//时间小于10

laba=~laba;//声音报警

}

这是9999秒倒计时的


网站题目:51c语言计时函数 c语音计时器
本文路径:http://myzitong.com/article/doigjce.html