单片机 延时函数

在单片机的设计中延时函数最是常见,比如流水灯的时间控制等都需对时间进行控制,因此博主贴出一个简单的延时函数供参考.

/**********************************************************************/
// 通过延时函数实现数码管的显示
/**********************************************************************/
#include<reg51.h>
#define uchar unsigned char
code seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int delay_time) //延时函数
{
unsigned int j=0;
for(;delay_time > 0;delay_time--)
{
for(j=0;j < 200;j++);
}
}
void main(void)
{
uchar i; //声明一个循环变量
P2 = 0xfe; //P2.0为0,经74HC04反相后,加在SEG0阳极上的电平为1
while(1)
{
P0 = seven_seg[i]; //显示数组中对应的值
delay(300);
i++; //循环一次,i值增加1
if(i >= 10)
i = 0;
}

}

注:先用双重嵌套定义延时函数,然后在调用的时候进行参数的设置和传递,单位为MS,可以用来设置流水灯流速,闹钟定时等功能的实现,仅供参考.

时间: 2024-08-06 00:35:35

单片机 延时函数的相关文章

arduino的自带延时函数的陷阱

新手刚接触arduino,在今天玩温湿度传感器(AM2302)时,发现网上的程序中有一个名为micros()的函数不知是干什么用的,然后就在网上搜了搜: micros()是一个用了arduino的中断timer0写的函数,用于计算时间和,同时arduino的函数库中用了中断的函数还有delay().delayMicroseconds.millis()等等 . 那么问题来了,假设我们在做项目的时候,要用到定时器timer0相关的函数,但同时又要定时接收外来信号,那么必然要使用更多中断.这时就要小心

Qt自定义sleep延时函数(巧妙的使用时间差,但这样似乎CPU满格,而不是沉睡)

Qt不像VC++的win32/MFC编程那样,提供了现成的sleep函数可供调用.Qt把sleep函数封装在QThread类中.子线程可以调用sleep函数.但是如果用户想在主线程实现延时功能,该怎么办呢?方法是自定义sleep延时函数.通过QDateTime来实现时间差. #include <QDateTime> void MainWindow::sleep(int msec)//自定义Qt延时函数,单位毫秒 { QDateTime last = QDateTime::currentDate

改进的延时函数Delay(使用MsgWaitForMultipleObjects等待消息或超时的到来)

解决上一节中延时函数占CPU使用率(达50%)的第二种方法是利用消息机制,通过API函数MsgWaitForMultipleObjects等待消息或超时的到来,从而避免使用循环检测使CPU占用率过高.完整的改进版Delay函数代码如下: [delphi] view plaincopyprint? procedure Delay(dwMilliseconds:DWORD); var endTick: DWORD; Event: THandle; begin Timer1.Enabled:=Fals

C#一些延时函数

sleep延时方法: System.Threading.Thread.Sleep(1000); //毫秒 在C#窗口程序中,如果在主线程里调用Sleep,在Sleep完成之前, 界面呈现出假死状态,不能响应任何操作! 下边实现的是非独占性延时函数,延时过时中界面仍可响应消息: public static void Delay(int milliSecond) { int start = Environment.TickCount; while (Math.Abs(Environment.Tick

stm32中的延时函数

//粗延时函数,微秒 void delay_nus(u16 time) { u16 i=0; while(time--) { i=10;  //自己定义 while(i--) ; } } //毫秒级的延时 void delay_nms(u16 time) { u16 i=0; while(time--) { i=12000;  //自己定义 while(i--) ; } } 运用SysTick来实现准确定时: SysTick_Config(SystemCoreClock / 10)   函数的形

延时函数出错,volatile一例

莫名其妙的错误.使用Systick做的延时. 初始化是这样的: //SysTick配置 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); if(SysTick_Config(SystemCoreClock/1000))//开Systick中断,配置Systick时钟. { while(1); } 然后: //延时函数.1个nTime相当于时间:1ms. static uint32_t TimingDelay; void Delay(__I

内核延时函数

1) msleep:实现毫秒级的延时,该延时保证至少延时所设置的延时时间,不会提前超时返回,会让出CPU void msleep(unsigned int msecs) { unsigned long timeout = msecs_to_jiffies(msecs) + 1; while (timeout) timeout = schedule_timeout_uninterruptible(timeout); } 为什么在转换成jiffies时要+1呢?前边我们讲到,该延时要至少保证延时转换

C# 非独占延时函数 非Sleep

在C#窗口程序中,如果在主线程里调用Sleep,在Sleep完成之前, 界面呈现出假死状态,不能响应任何操作! 下边实现的是非独占性延时函数,延时过时中界面仍可响应消息: public static void Delay(int milliSecond) { int start = Environment.TickCount; while (Math.Abs(Environment.TickCount - start) < milliSecond) { Application.DoEvents(

取消延时函数

- (void) networkReachabilityDidUpdate:(NetworkReachability*)reachability { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(reachabilityChanged) object:nil]; [self performSelector:@selector(reachabilityChanged) withObject:nil