精华内容
下载资源
问答
  • c语言延时程序

    2014-05-04 18:19:10
    c语言延时程序
  • 本文主要介绍了一下关于PIC单片机C语言延时程序和循环子程序实现方法。
  • 单片机C语言延时程序

    2021-01-15 00:15:53
    单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是...

    单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。所以,通过测试我给大家提供一个延时子程序模块,并以此给一个出我们经常用到的延时的数据表格。(注意:表格中的数据只适合我的延时模块,对其他的延时程序不适用,切忌!!!!!!!!别到时候延时不对来骂我)

    延时模块:其中问号代表要填的数,要延时多少,到表格中去找数据,然后填上就OK!切忌3条FOR语句不能颠倒顺序

    void Delay()
    {
    	unsigned char a,b,c;
    	for(a=0;a<?;a++)
    	for(b=0;b<?;b++)
    	for(c=0;c<?;c++);
    } 
    
    
                                                           数据表如下
    /**********************************************************************************************************************/
    延时时间                    a的值                 b的值                      c的值             延时误差(us)
    10us                       1                       1                       1                         -0.5      
    20us                       1                       1                       8                         0 
    30us                       1                       1                       15                        +0.5
    40us                       2                       1                       9                         0 
    50us                       1                       1                       28                        0 
    60us                       1                       1                       35                        +0.5
    70us                       1                       1                       42                        +1
    80us                       1                       1                       48                        0
    90us                       1                       1                       55                        +0.5 
    100us                      1                       1                       61                        -0.5 
    200us                      1                       1                       128                       0 
    300us                      3                       1                       63                        +1.5 
    400us                      2                       1                       129                       0 
    500us                      5                       1                       63                        +0.5 
    600us                      6                       1                       63                         0 
    700us                      7                       1                       63                        -0.5 
    800us                      1                       3                       175                       +0.5 
    900us                      9                       1                       63                        -1.5 
    1ms                        1                       3                       219                       -1.5
    2ms                        2                       3                       220                       +3
    3ms                        3                       3                       220                       +3
    Xms                        X                       3                       220                       +3   
    (X的范围为2255)
    

    基本上我们平时用到的延时都在这里了,每种延时的误差都很小,最大也不过3us,有的甚至没有误差,已经很精确了,如果想延时1秒钟,你可以连续调用延时250ms的程序4次,总共延时误差12us,这样的误差已经不算误差了,用汇编语言编写还达不到这个程度。

    现在你不再为延时不精确担忧了,参照表中的数据写延时,想延时多少就能延时多少。

    再次重申:此表格是根据我的延时模块编写,这也是大多数朋友都习惯用的一个模块,如果你用其他模块或是改动了我的模块,延时都不准的,不信大家可以试试!

    展开全文
  • 单片机C语言延时程序计算2009-11-02 22:15单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们...
  • C语言延时程序 单片机C语言程序设计师试题 用液晶1602实现的万年历
  • 标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。
  • 单片机c语言延时程序

    2013-04-26 22:23:41
    作者在联系编程时积累延时程序,希望大家下载,交流学习
  • 一:学习书籍 新手入门C语言入门级推荐书籍:大学教科书:谭浩强版本的《C语言》。理由,这本书在大神眼里写的挺垃圾的,该讲的点讲的不清楚,甚至还有许多漏洞。但是对于新手而言基础语法的概念还是讲的很详细的...

    一:学习书籍

    新手入门C语言入门级推荐书籍:大学教科书:谭浩强版本的《C语言》。理由,这本书在大神眼里写的挺垃圾的,该讲的点讲的不清楚,甚至还有许多漏洞。但是对于新手而言基础语法的概念还是讲的很详细的(特别是没任何编程基础的)。

    C语言进阶书籍三件套:《C与指针》,《C陷进与缺陷》,《C专家编程》,这三本书的学习顺序按照逻辑的顺序进行,不然一上来就专家编程也不合适(或者您本来就是专家)。

    二:技巧

    在有程序的地方就一定存在或多或少的BUG。

    对于新手入门而言,首先需要解决的是编译器帮我们找到的bug——语法错误,当然也存在一些(或者更多更加犯人的非语法错误——逻辑错误)。由于C语言在设计时本身就存在一些不合理的地方(对此,《C陷进与缺陷》有相关的描述),这些不合理的地方更加容易导致语法错误的出现。在编程时,语法错误是最容易的错误,即便一段代码给你几十几百个error,但是对于逻辑上的错误一般很难发现,除非代码运行时出现严重的BUG。所以一般的在C编程时,所以在编程时我们需要时刻注意

    1.C允许局部变量与全局变量重名。在C语言调用规则中,当变量重名时(不同作用域条件下允许重名)。但是在实际操作时最好避免:任何两个变量重名,这样能够避免自己调用到自己不想用的参数,从而导致非预估的结果。

    2.在if(判断语句){}else{}语句中,判断语句中如果存在某一个变量与常量等值的比较时,常亮放在前面;

    例子:if(5 == i){i = 0;}; if (i == 5){i = 0;} 关于这两个判断语句好像没有什么差别,但是对于有时候手滑的状态将“==”变为“=”,就变得完全不一样了,对于5=i,编译器判断对于5这个常量进行赋值,不合法所以报一个error,当你编译报错时就直接定位语法错误了。但是当 i = 5 变成赋值语句就变得合法了,if(i)是真,不会报错,从而导致你的代码永远不会到else去。另外,如果你的i值有他用,这里的胡乱赋值会导致程序后续运行产生不想要的结果

    3.还是if else语句,当判断某一个值在某一个范围内时,最好增大他的判断条件

    例子:当一个数从零开始记录次数,记录到10次了就从新开始

    if(某个条件){i++;}

    if(10 == i){(i = 0);}

    这样看好像没有什么问题,而且在实际情况下也不会有什么问题。对于类似于i的变量,我们一般叫做flag,标志位,通常而言一个flag可能会在程序的不止一个地方被修改,这时如果i被以外添加到了11,就不再触发。所以一般采用if (i>=10);

    3.switch ...case...语句里面一定需要一个default;你们预想的情况都放在case里面

    对于某一个参数只能有1, 2,3三种情况,那一定case 1: case 2:case 3:而不是case 1: case 2 : default:

    4.正确利用tab键,所有的缩进应该利用tab键完成,所有的空格应该利用空格键完成。让代码排版规整,漂亮。并且保持统一的。这点可以多了解一下相关的编程规范的东西。一个漂亮的代码的作用,嗯,不用说

    5.合理,正确的使用预编译指令。对于入门级选手而言,#ifndef, #define #endif这三个可能就比较熟悉了,这个是创建一个头文件必要的三个预编译指令。同时其他的预编译指令能够让代码开发更加容易。特别是利用宏去定义一些常用的信息。

    #define LEDON gpioset(port,pin, 1)在代码中我使用LEDON更能表达我开灯的操作

    #define DELAY 100 这里也能说明我100是我需要延时的时间,在这样需要经常修改的变量变为宏还有一个好处就是能够较少代码的修改量,比如我需要延时20了,就不要满篇的找(而且还有容易漏)

    6.在实际应用中,一般我们需要的变量就需要他有很多中特性。enum, struct, union,利用这些关键字创建出来的变量更能代表该某些变量的特性,而不是定义一大堆的变量来代替。在稍微大一点的程序里,一般就是一大堆的这些变量在被各种操作,而不是那种零散的单个变量。

    7.struct 会存在一个叫做内存对齐的问题,你会发现同一个struct变量,你sizeof出来的大小和别人的不一定相同。这个问题你可以在看《C与指针》时,它会教你

    8.指针一定是C中最重要的东西。没有指针的C没有灵魂。因为大多数情况都是利用C开发底层硬件,当你和硬件打交道时需要了解的东西就是寄存器(某一个地址)。你如果需要直接操作某一块地址时,指针就是必须的东西。所以在任何情况下都要避免野指针。所以创建时初始化一下,void *p = NULL,当指针释放时,free(p),p = NULL;

    9.选择一套你喜欢的代码规范很重要,从命名规则,到排版,到注释,语法使用,到工程创建等

    10.作为一个底层程序员(要直接与硬件打交道的),一定要有一个软件不行怪硬件的心(调侃,同时也很重要),当然你如果拿到的是一块成熟的开发板(学习板除外)。因为Demo板开发不成熟,很可能存在焊点漏焊虚焊等情况,或者本身设计不足影响导致代码不能运行的状态。所以当你实在没法确定软件问题的时候,可以换一个demo板测试一下。

    11.程序不需要女朋友,所以你们有女朋友的介绍给我吧,因为你们不需要那玩意儿(很重要)

    12.以上观点仅仅是我个人的一点点小观点,如果你不同意,你可以反驳,我也虚心接受,但是我不会改。

    展开全文
  • 今天我们通过三个程序举例如何在程序中编写按键控制语句。一、三个制作中用到的电路图以及元器件清单相同。1.电路“按键与LED”电路图2.元器件清单二、一键无锁控制LED即按下LED点亮,放手LED熄灭。1.程序设计...

    按键即微动开关,本身不能自锁。今天我们通过三个程序举例如何在程序中编写按键控制语句。

    一、三个制作中用到的电路图以及元器件清单相同。

    1.电路

    dd3c31cce05beba40285bb9f5c2f769a.png

    “按键与LED”电路图

    2.元器件清单

    b5666a7b64f096190328d21c5182d672.png

    二、一键无锁控制LED

    即按下LED点亮,放手LED熄灭。

    1.程序设计(3.12.1)

    #include //头文件

    sbit LED=P1^0;//定义LED引脚

    sbit KEY=P3^2;//定义按键引脚

    void main()

    {

    while(1)

    {

    if(KEY==0)//判断按键是否按下

    {

    LED=0;//LED点亮

    }

    else

    {

    LED=1;//LED熄灭

    }

    }

    }

    2.程序解释

    “if(KEY==0)”注意判断按键是否按下,要用“==”而不是“=”;如果按键按下,LED点亮,否则熄灭。

    “= =”与“=”有什么区别,如何正确使用。

    用“= =”用于判断语句,而“=”是赋值的含义,比如“LED=0;”将“0”赋值

    三、一键自锁控制LED

    按一下LED点亮,再按一下LED熄灭。

    1.程序设计

    #include //51头文件

    sbit LED=P1^0;

    sbit KEY=P3 ^ 2;

    void main(void)

    {

    while(1)

    {

    if(KEY == 0)//判断按键状态

    {

    LED =~LED;//变化灯的状态

    }

    }

    }

    2.程序解释

    “~”,取反的符号,如果原来是高电平,取反后就为低电平,原来是低电平取反后就是高电平。通过判断按键状态,不断取反操作而实现LED状态变化。

    将程序下载后,你将发现,按键有时并不怎么听话,这个程序有问题,问题在哪儿?需要处理按键防抖。

    3.C语言基础知识

    按键防抖

    当按下按键时,由于金属弹片的作用,不能很快闭合稳定,放开时也不能立刻断开,闭合稳定前后称为按键抖动,消除抖动可以通过程序或者硬件电路实现,通常通过程序完成。

    c98142224566d7a9c570f535da3ad16a.png

    按键抖动

    如何用程序来实现呢?从上图中可以看出,当检测到按键状态变化,先延时一段时间(一般为10~20ms),绕开不稳定状态(前沿抖动),然后再检测一次按键状态,如果与前面检测的状态相同,说明已经进入“闭合稳定”。

    4.改进程序

    #include //头文件

    sbit LED=P1^0;

    sbit KEY=P3 ^ 2;

    void delay(unsigned int a)

    {

    unsigned int i,j;

    for(i=a;i>0;i--)

    for(j=110;j>0;j--);

    }

    void main()

    {

    while(1)

    {

    if(KEY == 0)//判断按键状态

    {

    delay(20);//延时20ms

    if(KEY == 0)//再次判断按键状态

    {

    LED =~LED;//变化灯的状态

    while(KEY == 0);//等待按键松开

    }

    }

    }

    }

    解释:

    两次检测按键状态,确保按键真正按下。按键消除抖动程序非常重要,在设计按键控制的电路中,一定要加上消除抖动程序。“while(KEY==0);”该条语句是等待按键释放,检测到按键释放后,跳出循环体。

    展开全文
  • 关于C语言精确延时程序,还有怎样编写c语言延时程序
  • 就是编写一个延时子程序,然后在延时程序处和while(1)设置断点,运行程序,在调试模式下就可以获得该延时子程序的准确延时时间。 1,编写如下源程序: #include void delay_ms(unsigned int ms) { unsigned int.

    C语言延时子程序准确设置 (51hei.com)

    文章转载自:http://www.51hei.com/mcu/3745.html

    推荐这个网站:http://www.51hei.com/  单片机教程网

    在给单片机写程序的时候往往需要一个微秒或者毫秒的延时子程序,但是C语言不同于汇编,很难根据语句确定准确的延时时间,经过各种查资料得到一种简单实用的方法:通过keil下断点调试确定时间。

     

    就是编写一个延时子程序,然后在延时程序处和while(1)设置断点,运行程序,在调试模式下就可以获得该延时子程序的准确延时时间。

    1,编写如下源程序:

    #include

    void delay_ms(unsigned int ms)
    {
    unsigned int i;
    unsigned char j;
        for(i=0;i
        {
            for(j=0;j<200;j++);
            for(j=0;j<102;j++);
        }
    }

    void main (void)
    {
    delay_ms(1);

    while(1);
    }

     

    2,下图位置设置断点

     

    3,看哥哥怎么搞:

    进入运行模式,开始运行(1处所示),程序会在延时子程序前的断点处停下,此时记录程序运行时间,2处所示。

    4,继续搞

    再次点运行(1处所示),此时程序会在第二个断点处,也就是while(1)停下,这时候程序刚刚运行完延时子程序,读取此时的程序运行时间,如2所示,,二者想减就是延时子程序运行时间。如下图:



    0.00143989-0.00042209=0.0010178,约等于1mS,ok,这样就得到你所写的延时子程序的延时时间,准确的哦,可以在你得到的运行时间的基础上更改数值来得到希望的延时时间。当然记得设置晶振为你所需要的,我这里是11.0592。

    展开全文
  • 非常精确的C语言延时程序表 用于精确延时的程序
  • C语言延时程序对照表,不需要再手动计算!精准地写出C语言延时程序
  • 单片机中C语言延时函数

    千次阅读 2010-05-15 16:02:00
    单片机C语言延时程序计算2009-11-02 22:15单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们...
  • 用在单片机上的C语言延时程序,适合无线NRF的子程序,并能够成功匹配主函数
  • 单片机C语言延时1MS子程序 void delay(unsigned int m) { unsigned int i; unsigned int j; for(i=0;i;i++) for(j=0;j;j++); }
  • c语言延时语句.doc

    2020-11-19 14:57:47
    PAGE / NUMPAGES C语言程序延时 Keil C51的编程语言常用的有2种一种是汇编语言另一种是C 语言用汇编语言写单片机程序时,精确时间延时是相对容易解决的比如,用的是晶振频率为12 MHz的AT 89C51,打算延时20 s,51单片机...
  • 本文简练的为读者介绍了在嵌入式系统中C语言实现延时程序的不同变量的区别,希望对读者有所帮助
  • 大家好,我们今日继续讲解VBA代码解决方案的第82讲内容:如何利用代码让程序延时,SLEEP函数和timeGetTime函数两个API函数的讲解。在上一讲中我们讲了使用Wait方法,但这种方法的不足是只能提供精度为1秒的延时,...
  • C语言的精确延时程序

    2010-07-09 21:57:51
    C语言实现的精确延时程序,程序可以使用,也可以学习。
  • KEIL C语言延时计算方法。 可以用于各种MCU. 具体使用方法为: 1、打开 keil\tools,ini 文件,在它的c51栏中加入 AGSI9=Emu51Form.DLL ("delay simulation") 然后存盘。 2、把 Emu51Form.dll 文件 copy 到 keil\...
  • 一、单片机C语言常见语法问题1.无返回值函数和有返回值函数(1)无返回值函数是指函数执行结果中无返回值,在函数定义或声明前用“void”修饰。如:void main();void delay()。(2)有返回值函数是指函数执行结果中有...
  • c语言延时函数的理解

    千次阅读 2018-05-22 19:41:10
    for循环实现C语言精确延时(晶振12MHz,一个机器周期1us.)一. 500ms延时程序程序: void delay500ms(void){ unsigned char i,j,k; for(i=15;i&gt;0;i--) for(j=202;j&gt;0;j--) for(k=81;k&gt;0;k--);}...
  • 51单片机C语言的精确延时程序设计方法。

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 376
精华内容 150
关键字:

c语言延时程序

c语言 订阅