登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机论坛
›
51单片机论坛
›
51单片机联网小区楼宇对讲的管理机程序
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版
51单片机联网小区楼宇对讲的管理机程序
[复制链接]
6039
4
ad***
管理员
发表于 2010-5-21 22:29:39
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
程序概述:
这是个具体产品程序,是联网小区楼宇对讲的管理机程序,它可以管理
成千上万个用户。
给这个程序的目的:
1、让大家了解更复杂的数据结构等
2、告戒大家光学习完开发板上的例子是不够的,那些只是练基本功
3、鼓励大家要好好学习,要不断的更新自己的知识
你需要做到的:
不要求你要和我一样去写这个程序,搞懂管理机的所有功能。你只要能
搞明白里面的一些数据类型、数据结构、函数模块等你能看到的东西就
行,还有里面隐含的一些嵌入系统程序设计的要点。
2006年06月02日:
修改了串口接收总线数据时候有可能导致数据冲突的问题,现在从串口接收到的数据是先
放到缓冲区中,然后在主函数中对缓冲区中的数据进行处理的,而不是对接收缓冲区进行操作。
2006年06月04日:
修改了一些小问题,在通话和振铃时候分机报警会先将当前连接断开,然后再发出报警信号。
2006年06月05日:
修改收到报警之后按"取消",之后的显示状态。现在按"取消"之后会回到报警之前的显示状态。
2006年06月06日:
继续修改了一些管理机LCD屏的显示上的小问题。
2006年08月15日:
修改管理机启动部分代码,在烧写管理机程序的时候,选择“只有停电关看门狗”烧写方式,
这样可以提高管理机在启动时候的稳定性,防止静电导致
单片机
复位之后在启动过程中再次死机。
以下是部分程序,全部程序见附件
// Copyright (c)2005 - 2006 by Laser Electronics, All Rights Reserved.
/*----------------------------------------------------------------------------+
| File Name: Main.c, v1.0.1 |
| Author: |
| Date: |
+-----------------------------------------------------------------------------+
| Description: 联网型智能楼宇对讲系统 -- 管理中心机主程序文件 |
| 器件选择 -- STC89C58RD+, PQFP-44 |
| 时钟频率 -- 24.000 MHz |
+-----------------------------------------------------------------------------+
| Release Notes: |
| | |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Include files |
+----------------------------------------------------------------------------*/
#include "Main.h"
#include "LCD.h"
#include "UART.h"
#include "Timer.h"
#include "KeyProcess.h"
#include "RouteTable.h"
/*----------------------------------------------------------------------------+
| Type Definition & Macro |
+----------------------------------------------------------------------------*/
// I2C存储器的配置:使用24
C51
2,64K字节空间, 0x0000 ~ 0xFFFF, 这里只用到16K字节
/*----------------------------------------------------------------------------+
| 0x0000(2字节): 系统标志
| 0x0002(1字节): 双击间隔时间
| 0x0003(1字节): 管理机轮检门口机的时间间隔
| 0x0004(2字节): 小区的路由信息I2C起始地址
| 0x0006(2字节): 小区的路由信息长度
| 0x0008(2字节): 射频卡信息起始地址
| 0x000A(2字节): 射频卡信息长度
| 0x000C(2字节): 报警信息起始地址
| 0x000E(2字节): 报警信息长度
| 0x0010(2字节): 报警记录第一条记录的地址
| 0x0012(2字节): 报警记录最后一条记录的地址
| 0x0020 - 0x002F (16字节): 系统密码+密码长度
| 0x0030 - 0x003F (16字节): 管理机LOGO,在管理机空闲模式下LCD屏的第一行显示的字符
| 0x0400 - 0x07FF (1K字节):
| 0x0800 - 0x0FFF (2K字节): 存放小区的路由信息,每个单元占用8个字节,所以可以存放256个单元的路由信息
| 0x1000 - 0x1FFF (4K字节): 存放卡号,每张卡号占用16个字节,所以可以存放256张卡号
| 0x2000 - 0x3FFF (8K字节): 存放报警记录,每条报警记录占用16个字节,所以可以存放512条报警记录
+----------------------------------------------------------------------------*/
#define DEFAULT_ROUTE_INFO_START_ADDR 0x0800 // 从0x0800地址处开始
#define DEFAULT_ROUTE_INFO_LENGTH 0x0800 // 用2K字节来存放小区路由信息,每个单元需要8字节,可以存放256个单元的路由信息
#define DEFAULT_RFCARDTAB_START_ADDR 0x1000 // 从0x1000地址处开始
#define DEFAULT_RFCARDTAB_LENGTH 0x1000 // 用4K字节来存放临时射频卡号,每张卡需16字节,可以存放256张临时卡
#define DEFAULT_AL
ARM
_RECORD_START_ADDR 0x2000 // 从0x2000地址处开始
#define DEFAULT_ALARM_RECORD_LENGTH 0x2000 // 用8K字节来存放分机报警记录,每条记录需16字节,可以存放512条报警记录
/*----------------------------------------------------------------------------+
| Extern Variables |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Global Variables |
+----------------------------------------------------------------------------*/
bit bHandleUp; // 指示手柄是否提起,TRUE为提起状态,FALSE为压下状态
bit LineIdle; // 当前线路上是否有数据,如果没有才可以发数据
bit TxOK; // 当前字节是否已经发送完成
data t_SystemStatus SystemStatus; // 当前选择的命令,是监视、查询还是呼叫等等
data UINT RS485SendWaitTimer; // RS485总线超时重发计数器,当这个数减计数到MAX_RS485_WAIT_TIMES的倍数的时候重发,减到0的时候表示放弃这一次发送
data UINT MessageShowTimer; // 消息显示的时间长短计数器,当这个数减到0的时候清除显示的消息并回到之前的状态
data UINT BeepTimer; // 蜂鸣器发声定时器
idata BYTE WDT_Counter; // 看门狗狗粮
idata UINT LineIdleWaitTime; // 等待485总线空闲需要等待的时间, 根据地址而各不相同
idata UINT RingTimeCounter; // 振铃信号持续时间,超过这个时间就会停止振铃
idata UINT AlarmTimeCounter; // 报警持续时间,超过这个时间就会停止报警
idata UINT ViewTimeCounter; // 监视定时器,当这个计数器减计数到0的时候向门口机发送取消监视请求的命令
xdata BYTE ConnectingAddr[4]; // 管理机正在监视的门口机地址
xdata BYTE KeyBuffer[KEY_BUF_LENGTH+1]; // 按键缓冲
xdata BYTE CardBuffer[Card_BUF_LENGTH+1]; // 卡号缓冲
xdata t_RouteInfo RouteInfo; // 路由信息缓冲区
idata BYTE DoubleKeyPressTimer; // 设定双击按键的时间间隔,以10ms为单位
idata BYTE CheckDoorIntervalTimer; // 设定管理机轮检门口机的时间间隔
idata UINT RouteInfoStartAddr; // 用于存放各个用户的路由信息的表格在I2C存储器中的起始地址
idata UINT RouteInfoLength; // 用于存放各个用户的路由信息的表格的长度
idata UINT RFCardTabStartAddr; // 用于存放各个单元所有卡号对应的I2C地址的表格的头地址,即表格的地址
idata UINT RFCardTabLength; // 用于存放各个单元所有卡号对应的I2C地址的表格的长度的地址
idata UINT AlarmRecordStartAddr; // 存放的报警记录的首地址
idata UINT AlarmRecordLength; // 存放的报警记录的长度
xdata BYTE SystemPassword[MAX_SYSTEM_PASSWORD_LENGTH+1]; // 存放系统管理员密码,第一个字节为密码长度
xdata t_AlarmRecord AlarmRecord; // 报警记录缓冲区
idata t_AlarmRecord *pAlarmRecord; // 指向报警记录的指针
xdata t_RFCardUser RFCardUser; // 定义记录刷卡用户的结构体,包括卡号,用户名
idata t_RFCardUser *p_RFCardUser;
xdata BYTE I2CBuffer[I2C_PAGE_SIZE] _at_ 0x0000; // 读写I2C存储器的内存缓冲
xdata BYTE CheckDoorIntervalArray[MAX_DOOR_NUM] _at_ I2C_PAGE_SIZE;// 管理机轮检各个门口机所用到的数据缓存,每一个门口机对应一个字节
data UINT DoorNumber; // 在I2C存储器中设置的单元的数量,根据这个数量管理机决定需要对多少个门口机进行轮检
code UINT SystemPasswordAddress = 0x20; // 用于存放系统管理员密码的I2C地址,长度为16个字节,用一页来存放
code BYTE NullString[NULL_STRING_LENGTH] = {0x00}; // 常量空字符串
code BYTE Logo[DISP_BUF_LENGTH] = " 雷森电子 ";
/*----------------------------------------------------------------------------+
| Internal Variables |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Type Definition & Macro |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| System Initialization Routines |
+----------------------------------------------------------------------------*/
//
复制代码
楼宇对讲.rar
(62.35 KB, 下载次数: 111)
2010-5-21 22:29 上传
点击文件名下载附件
举报
回复
4 个评论
cy***
新手上路
发表于 2010-7-1 10:54:31
|
显示全部楼层
非常感谢分享,想找一个完整的程序不容易,转了很多网站,终于在这里找到了,再次感谢!
举报
回复
支持
反对
jun***
新手上路
发表于 2012-3-19 19:57:15
|
显示全部楼层
不知道硬件电路有没有。
举报
回复
支持
反对
ywd***
新手上路
发表于 2012-6-18 08:24:48
|
显示全部楼层
非常感谢分享,想找一个完整的程序不容易,转了很多网站,终于在这里找到了,再次感谢!
举报
回复
支持
反对
a65***
新手上路
发表于 2012-8-17 20:49:27
|
显示全部楼层
看看,有点兴趣
举报
回复
支持
反对
返回列表
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
VKL144A TSSOP48 点阵式液晶驱动芯片/低功
产品品牌:永嘉微电/VINKA 产品型号:VKL44A 封装形式:TSSOP48 概述 VKL144是
高抗干扰液晶显示驱动/省电液晶驱动IC/LCD
产品品牌:永嘉微电/VINKA 产品型号:VKL128 封装形式:SSOP44 概述 VKL128是一
VK2C23A/B LQFP64/48LCD驱动控制器/高抗干
产品品牌:永嘉微电/VINKA 产品型号:VK2C23A/B 封装形式:LQFP64/48 概述 VK2C
高抗干扰液晶驱动/点阵式液晶显示IC/VK2C21
产品品牌:永嘉微电/VINKA 产品型号:VK2C21D 封装形式:SOP16 概述 VK2C21D是
I2C通信接口段码液晶驱动芯片VK2C21C SOP20
产品品牌:永嘉微电/VINKA 产品型号:VK2C21C 封装形式:SOP20 概述 VK2C21C是
更多
精华推荐
VKL144A TSSOP48 点阵式液晶驱动芯片/低功
高抗干扰液晶显示驱动/省电液晶驱动IC/LCD
VK2C23A/B LQFP64/48LCD驱动控制器/高抗干
高抗干扰液晶驱动/点阵式液晶显示IC/VK2C21
I2C通信接口段码液晶驱动芯片VK2C21C SOP20
VK2C21B SOP24高抗干扰LCD液晶段码驱动芯片
低成本、高性能、带EEPROM了解一下
工控仪表/水电气表LCD驱动/抗干扰液晶段码
更多
社区学堂
VKL144A TSSOP48 点阵式液晶驱动芯片/
高抗干扰液晶显示驱动/省电液晶驱动IC/
VKL144A TSSOP48 点阵式液晶驱动芯片/低功
产品品牌:永嘉微电/VINKA 产品型号:VKL44A 封装形式:TSSOP48 概述 VKL144是
高抗干扰液晶显示驱动/省电液晶驱动IC/LCD
产品品牌:永嘉微电/VINKA 产品型号:VKL128 封装形式:SSOP44 概述 VKL128是一
VK2C23A/B LQFP64/48LCD驱动控制器/高抗干
产品品牌:永嘉微电/VINKA 产品型号:VK2C23A/B 封装形式:LQFP64/48 概述 VK2C
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表