请选择 进入手机版 | 继续访问电脑版

Lazarus中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 2628|回复: 5

[Lazarus实战宝典] Turbo51学习笔记(5) 第一个程序

[复制链接]

该用户从未签到

发表于 2014-11-5 23:06:03 | 显示全部楼层 |阅读模式
本帖最后由 逍遥派掌门人 于 2014-11-5 23:08 编辑

在高级语言里,“Hello world"是经典的第一个程序;在与硬件密切相关的嵌入式编程里,点亮LED灯则更具有代表性。
下面的代码实现一个LED灯的明、暗循环:
  1. Program led_test;

  2. const
  3.    flash_time_limit_1=$A0;
  4.    flash_time_limit_2=$FF;

  5. var
  6.   count : byte;
  7.   LED_bit : Boolean absolute P1.1;      // 设置LED接到P1.1脚上
  8.   flash_status : byte;  
  9.   flash_delay_1,flash_delay_2,flash_delay_3 : byte;
  10.    
  11. begin
  12.    flash_status := 0;
  13.   
  14.   repeat

  15.     case flash_status of
  16.     0:
  17.       begin
  18.           LED_bit := not LED_bit;          // 明、暗的转换
  19.          flash_delay_1 := flash_time_limit_1;
  20.          Inc(flash_status);      
  21.      end;
  22.    1:
  23.      begin
  24.          if (flash_delay_1 > 0) then
  25.          begin
  26.             Dec(flash_delay_1);         
  27.          end
  28.          else begin
  29.                   flash_delay_2 := flash_time_limit_2;
  30.                   Inc(flash_status);
  31.                end;
  32.      end;
  33.    2:
  34.     begin
  35.         if (flash_delay_2 > 0) then
  36.         begin
  37.             Dec(flash_delay_2);
  38.         end
  39.         else begin
  40.                   flash_status := 0;    // 重新开始
  41.                end;
  42.      end;
  43.    end;

  44.   until False;  
  45.   
  46. end.
复制代码
编译成功:
   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

该用户从未签到

发表于 2014-11-6 14:10:34 | 显示全部楼层
感谢掌门人,要是有设备试一下就好了
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 1340 天

    [LV.10]以坛为家III

    发表于 2014-11-7 09:38:03 | 显示全部楼层
    1234567 发表于 2014-11-6 14:10
    感谢掌门人,要是有设备试一下就好了

    在Proteus上测试没有啥问题,就是闪烁的速度快一点。


    按理说在实际的89C51上也应该可以,有空烧录一下试试实际效果。

    Good Luck~

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    点评

    谢谢你的电路图  发表于 2014-11-7 13:15
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 1340 天

    [LV.10]以坛为家III

    发表于 2014-11-8 13:34:47 | 显示全部楼层
    将程序下载的C51中去,LED灯会常亮,需要修改延时时间。
    如:
    const
       flash_time_limit_1=$A0;
       flash_time_limit_2=$FF;
    修改为A000和FFFF

    var
        flash_delay_1,flash_delay_2,flash_delay_3 : byte;
    修改其类型为Word。

    这样就可以在C51中清晰的看到LED灯的变化。

    Good Luck~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主 发表于 2014-11-9 01:34:09 | 显示全部楼层
    cvlsam 发表于 2014-11-8 13:34
    将程序下载的C51中去,LED灯会常亮,需要修改延时时间。
    如:
    const

    简单的方法就是改变时钟频率。
    验证的方法另外开一帖。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 1340 天

    [LV.10]以坛为家III

    发表于 2014-11-9 14:51:47 | 显示全部楼层
    逍遥派掌门人 发表于 2014-11-9 01:34
    简单的方法就是改变时钟频率。
    验证的方法另外开一帖。

    嗯,在Proteus上的确可以改变时钟频率,而烧录到C51单片机上时,显然变成常亮了,正如上面我反馈的,通过延长循环时间,这样可就可以看出闪烁效果了。
    回复 支持 反对

    使用道具 举报

    QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1

    GMT+8, 2020-10-29 12:42 , Processed in 0.055933 second(s), 28 queries .

    Powered by Discuz! F1.0 Build 20160930

    © 2001-2020 Comsenz Inc. & Discuz! Fans

    快速回复 返回顶部 返回列表