找回密码
 注册会员
搜索附件  

楼宇对讲.rar

 

51单片机联网小区楼宇对讲的管理机程序:
程序概述:
    这是个具体产品程序,是联网小区楼宇对讲的管理机程序,它可以管理
    成千上万个用户。
给这个程序的目的:
    1、让大家了解更复杂的数据结构等
    2、告戒大家光学习完开发板上的例子是不够的,那些只是练基本功
    3、鼓励大家要好好学习,要不断的更新自己的知识
你需要做到的:
    不要求你要和我一样去写这个程序,搞懂管理机的所有功能。你只要能
    搞明白里面的一些数据类型、数据结构、函数模块等你能看到的东西就
    行,还有里面隐含的一些嵌入系统程序设计的要点。

2006年06月02日:
  修改了串口接收总线数据时候有可能导致数据冲突的问题,现在从串口接收到的数据是先
放到缓冲区中,然后在主函数中对缓冲区中的数据进行处理的,而不是对接收缓冲区进行操作。
2006年06月04日:
    修改了一些小问题,在通话和振铃时候分机报警会先将当前连接断开,然后再发出报警信号。
2006年06月05日:
    修改收到报警之后按"取消",之后的显示状态。现在按"取消"之后会回到报警之前的显示状态。
2006年06月06日:
    继续修改了一些管理机LCD屏的显示上的小问题。
2006年08月15日:
    修改管理机启动部分代码,在烧写管理机程序的时候,选择“只有停电关看门狗”烧写方式,
这样可以提高管理机在启动时候的稳定性,防止静电导致单片机复位之后在启动过程中再次死机。

以下是部分程序,全部程序见附件

  1. // Copyright (c)2005 - 2006 by Laser Electronics, All Rights Reserved.
  2. /*----------------------------------------------------------------------------+
  3. | File Name: Main.c, v1.0.1 |
  4. | Author: |
  5. | Date: |
  6. +-----------------------------------------------------------------------------+
  7. | Description: 联网型智能楼宇对讲系统 -- 管理中心机主程序文件 |
  8. | 器件选择 -- STC89C58RD+, PQFP-44 |
  9. | 时钟频率 -- 24.000 MHz |
  10. +-----------------------------------------------------------------------------+
  11. | Release Notes: |
  12. | | |
  13. +----------------------------------------------------------------------------*/

  14. /*----------------------------------------------------------------------------+
  15. | Include files |
  16. +----------------------------------------------------------------------------*/
  17. #include "Main.h"
  18. #include "LCD.h"
  19. #include "UART.h"
  20. #include "Timer.h"
  21. #include "KeyProcess.h"
  22. #include "RouteTable.h"

  23. /*----------------------------------------------------------------------------+
  24. | Type Definition & Macro |
  25. +----------------------------------------------------------------------------*/
  26. // I2C存储器的配置:使用24C512,64K字节空间, 0x0000 ~ 0xFFFF, 这里只用到16K字节
  27. /*----------------------------------------------------------------------------+
  28. | 0x0000(2字节): 系统标志
  29. | 0x0002(1字节): 双击间隔时间
  30. | 0x0003(1字节): 管理机轮检门口机的时间间隔
  31. | 0x0004(2字节): 小区的路由信息I2C起始地址
  32. | 0x0006(2字节): 小区的路由信息长度
  33. | 0x0008(2字节): 射频卡信息起始地址
  34. | 0x000A(2字节): 射频卡信息长度
  35. | 0x000C(2字节): 报警信息起始地址
  36. | 0x000E(2字节): 报警信息长度
  37. | 0x0010(2字节): 报警记录第一条记录的地址
  38. | 0x0012(2字节): 报警记录最后一条记录的地址
  39. | 0x0020 - 0x002F (16字节): 系统密码+密码长度
  40. | 0x0030 - 0x003F (16字节): 管理机LOGO,在管理机空闲模式下LCD屏的第一行显示的字符
  41. | 0x0400 - 0x07FF (1K字节):
  42. | 0x0800 - 0x0FFF (2K字节): 存放小区的路由信息,每个单元占用8个字节,所以可以存放256个单元的路由信息
  43. | 0x1000 - 0x1FFF (4K字节): 存放卡号,每张卡号占用16个字节,所以可以存放256张卡号
  44. | 0x2000 - 0x3FFF (8K字节): 存放报警记录,每条报警记录占用16个字节,所以可以存放512条报警记录
  45. +----------------------------------------------------------------------------*/
  46. #define DEFAULT_ROUTE_INFO_START_ADDR 0x0800 // 从0x0800地址处开始
  47. #define DEFAULT_ROUTE_INFO_LENGTH 0x0800 // 用2K字节来存放小区路由信息,每个单元需要8字节,可以存放256个单元的路由信息
  48. #define DEFAULT_RFCARDTAB_START_ADDR 0x1000 // 从0x1000地址处开始
  49. #define DEFAULT_RFCARDTAB_LENGTH 0x1000 // 用4K字节来存放临时射频卡号,每张卡需16字节,可以存放256张临时卡
  50. #define DEFAULT_ALARM_RECORD_START_ADDR 0x2000 // 从0x2000地址处开始
  51. #define DEFAULT_ALARM_RECORD_LENGTH 0x2000 // 用8K字节来存放分机报警记录,每条记录需16字节,可以存放512条报警记录

  52. /*----------------------------------------------------------------------------+
  53. | Extern Variables |
  54. +----------------------------------------------------------------------------*/
  55. /*----------------------------------------------------------------------------+
  56. | Global Variables |
  57. +----------------------------------------------------------------------------*/

  58. bit bHandleUp; // 指示手柄是否提起,TRUE为提起状态,FALSE为压下状态
  59. bit LineIdle; // 当前线路上是否有数据,如果没有才可以发数据
  60. bit TxOK; // 当前字节是否已经发送完成

  61. data t_SystemStatus SystemStatus; // 当前选择的命令,是监视、查询还是呼叫等等

  62. data UINT RS485SendWaitTimer; // RS485总线超时重发计数器,当这个数减计数到MAX_RS485_WAIT_TIMES的倍数的时候重发,减到0的时候表示放弃这一次发送

  63. data UINT MessageShowTimer; // 消息显示的时间长短计数器,当这个数减到0的时候清除显示的消息并回到之前的状态

  64. data UINT BeepTimer; // 蜂鸣器发声定时器

  65. idata BYTE WDT_Counter; // 看门狗狗粮

  66. idata UINT LineIdleWaitTime; // 等待485总线空闲需要等待的时间, 根据地址而各不相同

  67. idata UINT RingTimeCounter; // 振铃信号持续时间,超过这个时间就会停止振铃

  68. idata UINT AlarmTimeCounter; // 报警持续时间,超过这个时间就会停止报警

  69. idata UINT ViewTimeCounter; // 监视定时器,当这个计数器减计数到0的时候向门口机发送取消监视请求的命令

  70. xdata BYTE ConnectingAddr[4]; // 管理机正在监视的门口机地址

  71. xdata BYTE KeyBuffer[KEY_BUF_LENGTH+1]; // 按键缓冲

  72. xdata BYTE CardBuffer[Card_BUF_LENGTH+1]; // 卡号缓冲

  73. xdata t_RouteInfo RouteInfo; // 路由信息缓冲区

  74. idata BYTE DoubleKeyPressTimer; // 设定双击按键的时间间隔,以10ms为单位
  75. idata BYTE CheckDoorIntervalTimer; // 设定管理机轮检门口机的时间间隔

  76. idata UINT RouteInfoStartAddr; // 用于存放各个用户的路由信息的表格在I2C存储器中的起始地址
  77. idata UINT RouteInfoLength; // 用于存放各个用户的路由信息的表格的长度

  78. idata UINT RFCardTabStartAddr; // 用于存放各个单元所有卡号对应的I2C地址的表格的头地址,即表格的地址
  79. idata UINT RFCardTabLength; // 用于存放各个单元所有卡号对应的I2C地址的表格的长度的地址

  80. idata UINT AlarmRecordStartAddr; // 存放的报警记录的首地址
  81. idata UINT AlarmRecordLength; // 存放的报警记录的长度

  82. xdata BYTE SystemPassword[MAX_SYSTEM_PASSWORD_LENGTH+1]; // 存放系统管理员密码,第一个字节为密码长度

  83. xdata t_AlarmRecord AlarmRecord; // 报警记录缓冲区
  84. idata t_AlarmRecord *pAlarmRecord; // 指向报警记录的指针

  85. xdata t_RFCardUser RFCardUser; // 定义记录刷卡用户的结构体,包括卡号,用户名
  86. idata t_RFCardUser *p_RFCardUser;

  87. xdata BYTE I2CBuffer[I2C_PAGE_SIZE] _at_ 0x0000; // 读写I2C存储器的内存缓冲

  88. xdata BYTE CheckDoorIntervalArray[MAX_DOOR_NUM] _at_ I2C_PAGE_SIZE;// 管理机轮检各个门口机所用到的数据缓存,每一个门口机对应一个字节
  89. data UINT DoorNumber; // 在I2C存储器中设置的单元的数量,根据这个数量管理机决定需要对多少个门口机进行轮检

  90. code UINT SystemPasswordAddress = 0x20; // 用于存放系统管理员密码的I2C地址,长度为16个字节,用一页来存放

  91. code BYTE NullString[NULL_STRING_LENGTH] = {0x00}; // 常量空字符串

  92. code BYTE Logo[DISP_BUF_LENGTH] = " 雷森电子 ";

  93. /*----------------------------------------------------------------------------+
  94. | Internal Variables |
  95. +----------------------------------------------------------------------------*/
  96. /*----------------------------------------------------------------------------+
  97. | Type Definition & Macro |
  98. +----------------------------------------------------------------------------*/

  99. /*----------------------------------------------------------------------------+
  100. | System Initialization Routines |
  101. +----------------------------------------------------------------------------*/
  102. //
复制代码


非常感谢分享,想找一个完整的程序不容易,转了很多网站,终于在这里找到了,再次感谢!
不知道硬件电路有没有。
非常感谢分享,想找一个完整的程序不容易,转了很多网站,终于在这里找到了,再次感谢!

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 18:23 , Processed in 0.038620 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部