题 目 _智IC卡水表控制系统设计_
摘
直水户水量工进行抄表理模式收费员进家户收费指派户指定点行缴纳种传统收取水费方式仅需工作员费时费力效率低存常常出现户欠缴迟缴漏缴水费时家等问题针问题文研究国外智水表发展现状基础设计基单片机实现IC卡智水表控制系统系统51单片机核心部件运IC卡读写加密技术实现购水水量理
文完成系统硬件电路设计软件设计硬件电路采模块化设计包括时钟芯片电路IC卡接口电路数存储器电路电磁阀驱动电路声光报警电路LED显示电路等详细分析模块工作原理系统软件采汇编语言编制出具体程序流程图该种流程图正确清晰表现出种系统作数安全性设计保证智水表数(计费)保密性(防止盗)数完整性合理进行芯片选择系统设计变成求种低成低功耗CPU卡智水表设计方案已成功开发出产品
文详细介绍智IC卡水表售水理系统功组成智IC卡水表控制器工作原理软硬件设计进行详细阐述解IC卡水表应
关键词:单片机IC卡智水表
Abstracts
Since then water users have relied on manual reading management mode which is paid by toll collectors to various households to collect fees or assign users to their own places The traditional way to collect water not only requires more staff and timeconsuming laborious efficiency is low and there is often a user owes late payment or leakage water sometimes also often not at home Aiming at these problems this paper designs an IC card intelligent water meter control system based on single chip microcomputer based on the current situation of intelligent water table development at home and abroad The system USES 51 MCU as the core component and USES IC card to read and write and encrypt technology to realize purchasing water and water consumption management
This paper has completed the hardware circuit design and software design of the system Hardware circuit USES modular design including the clock chip IC card interface circuit data memory circuit electromagnetic valve drive circuit sound and light alarm circuit LED display circuit etc are analyzed in detail the working principle of each module The system software is compiled with assembly language and the specific program flow chart is given
Key words single chip microcomputer IC card Intelligent water meter
第1章 绪
章介绍采智IC卡水表技术方案供水理部门户带许方便会产生积极益影响采智IC卡水表作基技术元件传统供水理模式进行现代化改造提供基础性技术支持传统水计量仪表相采智IC卡水表技术带许新变化
11 课题背景
着中国快速发展供水部门说实现先交费供水水模式家普遍认优点先交费水更合理种交易模式
改变入户操表收费模式种模式改变意义巨城市规模断扩居民户数快速增加供水部门抄表收费工作量断加传统门抄表模式难适应种变化现种原影响工入户操表效率已逐渐降种模式成断增加采智IC卡水表极理系统根改变供水部门派千家万户抄表收费模式果金融系统配合减少布点成规模采智IC卡水表技术降低供水部门理成会显著帮助IC卡进行交易结算户决定交费时间数量增户性特着家庭安全意识隐私意识增强入户抄表门收费等意进入私住户做法逐渐受欢迎甚受抵制必须予重视社会发展趋势智IC卡进行交易结算效解决带社会隐患难题
效解决技术难题着水资源紧张会逐步实行超计划水价甚阶梯式水价等较复杂水理模式供水交易提出较高技术求采普通水表工抄表模式难解决技术问题采智IC卡水表容易解决问题远传抄表系统相智IC卡水表具维护成低没布线造成混乱高障率等问题智IC卡水表优点会智IC卡水表逐渐社会接受成种基配置智水表系统着现代计计量技术传感技术信息网络技术社会化需求发展断前发展智水表系统未发展中体现出济实双实时数享特点正种技术发展社会需求发展集中体现时体现着类水资源谐存存理念
12 国外现状
面二十世纪中国供水供电事业发展目标中国建设部21世纪远景规划国实现康住宅水电煤气纯净水热水口径水表全部信息出户彻底填补国供水供电计量理方面空白破国供水电计量理落局面中水表系统智化提高供水理部门工作效率节约费加强水监督理提供效措施技术节约水合理水创造条件
国目前水表新产品开发基鉴国外先进模式国外方面研究设计起步较早例ABB公司KENT水表采充电电池具健读数显示日期时间户水量兼机械式电子式读数功配备IBM PC兼容机接口进行电话通信德国Sameco公司新型水表显示年年度水量日期时间等开发电卡式水表国生产水表企业智化水表作研究低功耗性等方面没达预期效果没量推广普应国外水表行业目前情况水资源持续发展目标国传统水表生产必须进行改进适应前社会济发展需口市场竞争中占席
目前新型水表开发研制遵循计量准确读数直观低功耗数安全性原关计量准确低功耗般涉元器件选软件编制信号传输掉电保护抗干扰等许问题关十读数直观问题考虑LED显示功耗较电路连接复杂寿命等素般采LCD液晶显示具良性价关数安全性问题般讲智卡水表系统准确性性安全性体现智卡密码安全性数加密读写智卡控制系统动作性等方面
13 基求
1系统单片机作控制器采模块设计方法系统硬件软件进行详细设计
2IC卡插入水表中确认卡效正常供水达卡中购水量水表动关闭闸门切断供水
3卡中水量剩定量时水表发出报警信号提醒户时购水
4通水表显示屏查累计水量月水量水量
5插入购水IC卡时水表动水表剩余水量次购水量进行累计
6具动保护功掉电保护功
7加密功做专卡专
14 文结构
首先课题进行深入解认识智IC卡普通缴费优劣国外现状发展前景进行定解次需解系统中需原理系统中需软件硬件综合需达务书中求画出电路图
第二章 方案证选择
章详细介绍系统原理框图充分解方案优缺点进行选择种模块工作原理
21总体思路概括
系统采51单片机核心处理单元IC卡插入时候触动卡插槽开关单片机开始读取IC卡识码识码验证通证明水卡该水表然开始读取IC水量读取动单片机连接存储器值进行累加然液晶显示累计水量剩水量月水量月水量月初号0000 动清零月份识采DS1302时钟芯片进行读取时间信息水量剩余定量时出发蜂鸣器报警LED发光声光报警
系统原理框图图21示系统稳压电源模块单片机模块时钟芯片模块IC卡插槽模块电磁阀模块数存储器模块声光报警模块显示模块等部分组成
图21 系统原理框图
221 单片机模块
单片机全称单片微型计算机(Single Chip Microcomputer)简写MCU微型控制器专工业控制测量设计具集成度高性高性价高三高优势体积功全特点应计算机外设智仪器仪表家电器工业检测控制通信设备等嵌入式工程师够根应象需求选择合适单片机进行种系统设计程序设计系统程序指令完成规定工作
单片机较
单片机系统中重部分单片机中键微机功中单片机开始读取IC卡识码识码验证通证明水卡该水表然开始读取IC水量读取动单片机连接存储器值进行累加然液晶显示累计水量剩水量月水量然相应处理时必须考虑系统价格体积
222 时钟芯片模块
DS1302美国DALLAS公司推出种高性低功耗实时时钟芯片附加31字节静态RAM采SPI三线接口CPU进行步通信采突发方式次传送字节时钟信号RAM数实时时钟提供秒分时日星期月年月31天时动调整具闰年补偿功工作电压宽达25~55V采双电源供电(电源备电源)设置备电源充电方式提供背电源进行涓细电流充电力DS1302外部引脚分配图1示部结构图2示DS1302数记录特某具特殊意义数点记录实现数出现该数时间时记录广泛应测量系统中
图23 外部引脚
引脚功:
Vcc1:电源Vcc2:备份电源Vcc2>Vcc1+02V时Vcc2DS1302供电Vcc2< Vcc1时Vcc1DS1302供电
SCLK:串行时钟输入控制数输入输出
IO:三线接口时双数线
CE:输入信号读写数期间必须高该引脚两功:第CE开始控制字访问移位寄存器控制逻辑次CE提供结束单字节字节数传输方法
DS1302列组寄存器:
① DS1302关日历时间寄存器12中7寄存器(读时81h~8Dh写时80h~8Ch)存放数格式BCD码形式时寄存器(85h84h)位7定义DS1302运行12时模式24时模式高时选择12时模式12时模式时位5 1时表示PM24时模式时位5第二10时位
秒寄存器(81h80h)位7定义时钟暂停标志(CH)该位置1时时钟振荡器停止DS1302处低功耗状态该位置0时时钟开始运行控制寄存器(8Fh8Eh)位7写保护位(WP)7位均置0时钟RAM写操作前WP位必须0WP位1时写保护位防止寄存器写操作
② DS1302工作模式寄存器 谓突发模式指次传送字节时钟信号RAM数
③ 外DS1302充电寄存器等
DS1302工作原理
DS1302工作时数传送进行初始化需复位脚(RST)置高电8位址命令信息装入移位寄存器数时钟(SCLK)升串行输入前8位指定访问址命令字装入移位寄存器时钟周期读操作时输出数写操作时输出数时钟脉数单字节方式8+8(8位址+8位数)字节方式8加达248数
223 数存储器模块
I2C总线(Inter Integrated Circuit Bus):Philips公司推出串行总线标准(二线制)总线扩展外围器件外设接口通总线寻址具备总线仲裁高低速设备步等功高性机总线
I2C总线工作原理
串行数线SDA串行时钟线SCL构成发送接收数挂接I2C总线器件接口电路应具I2C总线接口SDASCL名端相连总线器件SDA发送址信号寻址需片选线
特点
组成系统结构简单占空间芯片脚数量少需片选信号价格低允许干兼容器件享总线应较广泛总线长度达76m传送速度达400kbps标准速率100kbps支持组件支持控器件(某时刻控器件)I2C总线设备SDA SCL引脚必须外接拉电阻
典型I2C总线系统结构图示I2C总线挂接器件中器件必须支持I2C总线通信协议
图24 系统结构
I2C总线器件寻址方式
器件通SCLSDA连接I2C总线器件进行数传输前需通寻址选择需通信器件I2C总线外围器件需唯7位址器件址引脚址两部分组成
器件址I2C器件固址编码器件出厂时已定更改
引脚址I2C总线外围器件址引脚(A2A1A0)决定根电路中接电源正极接悬空形成址代码
实际应中遇单片机没I2C总线接口例典型 51系列单片机类单片机操作I2C总线器件力需程序模拟I2C总线数传输协议
目前市场I2C总线接口器件种例AD转换器DA转换器(PCF8591)时钟芯片存储器(24C08)等里典型I2C总线接口存储器例进行介绍
I2C总线接口EEPROM存储器种采I2C总线接口串行总线存储器类存储器具体积引脚少功耗低工作电压范围宽等特点目前AtmelMicroChipNational等公司均提供种型号I2C总线接口串行EEPROM存储器单片机系统中较EEPROM存储器24系列串行EEPROM具型号容量支持I2C总线协议占单片机IO端口少芯片扩展方便读写简单等优点
图25 24C08引脚结构
224 显示模块
12864128*64点阵液晶模块点阵数简称
LCD12864常图形液晶显示模块显示分辨率128×64显示汉字图形置8192中文汉字(16X16 点阵)128 字符(8X16 点阵) 64X256 点阵显示 RAM(GDRAM)
LCD12864引脚功定义:
1:VSS接端
2:VDD电源正接+5V
3:VO度调整般接+5V
4:DI(CS*)片选接+5V
5:RW(SID*)数输入端
6:E(SCLK*)时钟输入端
7~14:DB0 ~ DB7行数总线
15:PSB串模式选择串行模式接行模式接+5V
16:NC空引脚需连接
17:RSTB复位端低电效般接+5V
18:VEE空引脚需连接
19:BLA背光正极接+5V
20 BLK背光负极接
模块接口说明:
*注释1:实际应中仅串口通讯模式PSB接固定低电模块J8GND焊锡短接
*注释2:模块部接电复位电路需常复位场合该端悬空 *注释3:背光模块电源模块JAJK焊锡短接
1前准备先模块加工作电压图连接方法调节LCD度显示出黑色底影程初步检测LCD缺段现象
2字符显示带中文字库128X640402B屏显示4行8列3216×16点阵汉字显示RAM显示1中文字符216×8点阵全高ASCII码字符屏实现32中文字符64ASCII码字符显示带中文字库128X640402B部提供128×2字节字符显示RAM缓区(DDRAM)字符显示通字符显示编码写入该字符显示RAM实现根写入容分液晶屏显示CGROM(中文字库)HCGROM(ASCII码字库)CGRAM(定义字形)容
带中文字库128X64显示模块时应注意点:
①欲某位置显示中文字符时应先设定显示字符位置先设定显示址写入中文字符编码
②显示ASCII字符程显示中文字符程相显示连续字符时须设定次显示址模块动址加1指字符位置否显示字符中会空ASCII字符位置
③字符编码2字节时应先写入高位字节写入低位字节
④模块接收指令前处理器必须先确认模块部处非忙状态读取BF标志时BF需0方接受新指令果送出指令前检查BF标志前指令指令中间必须延迟段较长时间等前指令确定执行完成指令执行时间请参考指令表中指令执行时间说明⑤RE基指令集扩充指令集选择控制位变更RE指令集维持状态非次变更RE位否相指令集时需次均重设RE位
23电路模块设计
231单片机外围接口电路
单片机外围电路图26示
图26单片机外围电路
232 稳压电源电路
系统12V稳压5v单片机供电图27示
图27稳压电路
233 时钟芯片电路
时钟芯片电路图28示
图28时钟芯片电路
234 数存储电路
数存储电路图29示
图29数存储电路
235电磁阀电路
电磁阀电路图210示
图210电磁阀电路
236声光报警电路
声光报警电路图211示
图211声光报警电路
237显示电路
显示电路图212示
图212显示电路
238 IC卡电路
IC卡电路图213示
图213 IC卡电路
3软件设计
31软件开发环境
汇编语言编写篇文章C写C语言简洁函数设计结构清晰功模块分称调试器果容易解决问题改进程序容易找相应模块兼容汇编语言微操作
软件MCS51汇编语言编制采结构化模块化程序设计方法程序外部中断0子程序外部中断1子程序IC卡片外数存储器读写软件设计显示子程序等模块组成
32程序流程图
程序流程图图31示
图31程序流程图
33模块程序
331 液晶显示程序
#ifndef _LCD12864_H_
#define _LCD12864_H_
*
init_lcd()
clrram_lcd()
gotoxy(22)
print(¾íÈÆÉ豸)*
#define uchar unsigned char
void wr_d_lcd(uchar content)
void wr_i_lcd(uchar content)
void clrram_lcd (void)
void init_lcd(void)
void busy_lcd(void)
void rev_row_lcd(uchar row)
void rev_co_lcd(uchar rowuchar coluchar mode)
void clr_lcd(void)
void wr_co_lcd(uchar rowuchar coluchar lcddata1uchar lcddtta2)
void wr_row_lcd(uchar rowchar *p)
**********************************
Òº¾§³õʼ»¯
**********************************
#endif
332 24C08数存储程序
#ifndef _24C08_H_
#define _24C08_H_
*
STORE_SDA 1 STORE_SDA1STORE_SCL1ʹÖ÷´ÓÉ豸´¦ÓÚ¿ÕÏÐ״̬
STORE_SCL 1
ÒÔÉÏÔÚ³õʼ»¯ÖÐд
secReadSet(2)¶Á³ö±£´æµÄÊý¾Ý¸³ÓÚsec
WriteSet(2sec) ÔÚ24c08µÄµØÖ·2ÖÐдÈëÊý¾Ýsec
*
#include
#include
#define OP_READ 0xa1 Æ÷¼þµØÖ·ÒÔ¼°¶ÁÈ¡²Ù×÷0xa1¼´Îª1010 0001B
#define OP_WRITE 0xa0 Æ÷¼þµØÖ·ÒÔ¼°Ð´Èë²Ù×÷0xa1¼´Îª1010 0000B
#define IC_READ 0xaf
#define IC_WRITE 0xae
sbit STORE_SCLP2^1 ½«´®ÐÐʱÖÓ×ÜÏßSTORE_SCL붨ÒåÔÚΪP34Òý½Å
sbit STORE_SDAP2^0 ½«´®ÐÐÊý¾Ý×ÜÏßSTORE_SDA붨ÒåÔÚΪP35Òý½Å
*****************************************************
º¯Êý¹¦ÄÜ£ºÑÓʱ1ms
***************************************************
void delay1ms()
{
unsigned char ij
for(i0i<10i++)
for(j0j<33j++)
}
*****************************************************
º¯Êý¹¦ÄÜ£ºÑÓʱÈô¸ÉºÁÃë
Èë¿Ú²ÎÊý£ºn
***************************************************
void delaynms(unsigned char n)
{
unsigned char i
for(i0i
}
***************************************************
º¯Êý¹¦ÄÜ£º¿ªÊ¼Êý¾Ý´«ËÍ
***************************************************
void start()
¿ªÊ¼Î»
{
STORE_SDA 1 STORE_SDA³õʼ»¯Îª¸ßµçƽ¡°1¡±
STORE_SCL 1 ¿ªÊ¼Êý¾Ý´«ËÍʱ£¬ÒªÇóSTORE_SCLΪ¸ßµçƽ¡°1¡±
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SDA 0 STORE_SDAµÄϽµÑر»ÈÏΪÊÇ¿ªÊ¼ÐźÅ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SCL 0 STORE_SCLΪµÍµçƽʱ£¬STORE_SDAÉÏÊý¾Ý²ÅÔÊÐí±ä»¯(¼´ÔÊÐíÒÔºóµÄÊý¾Ý´«µÝ£©
}
***************************************************
º¯Êý¹¦ÄÜ£º½áÊøÊý¾Ý´«ËÍ
***************************************************
void stop() ֹͣλ
{
STORE_SDA 0 STORE_SDA³õʼ»¯ÎªµÍµçƽ¡°0¡± _n
STORE_SCL 1 ½áÊøÊý¾Ý´«ËÍʱ£¬ÒªÇóSTORE_SCLΪ¸ßµçƽ¡°1¡±
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SDA 1 STORE_SDAµÄÉÏÉýÑر»ÈÏΪÊǽáÊøÐźÅ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SDA0
STORE_SCL0
}
***************************************************
º¯Êý¹¦ÄÜ£º¼ì²âÓ¦´ðλ
***************************************************
bit Ask() ¼ì²âÓ¦´ð
{
bit ack_bit ´¢´æÓ¦´ðλ
STORE_SDA 1 ·¢ËÍÉ豸£¨Ö÷»ú£©Ó¦ÔÚʱÖÓÂö³åµÄ¸ßµçƽÆÚ¼ä(STORE_SCL1)ÊÍ·ÅSTORE_SDAÏߣ¬
ÒÔÈÃSTORE_SDAÏßתÓɽÓÊÕÉ豸(AT24Cxx)¿ØÖÆ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SCL 1 ¸ù¾ÝÉÏÊö¹æ¶¨£¬STORE_SCLӦΪ¸ßµçƽ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
ack_bit STORE_SDA ½ÓÊÜÉ豸£¨AT24Cxx)ÏòSTORE_SDAË͵͵çƽ£¬±íʾÒѾ½ÓÊÕµ½Ò»¸ö×Ö½Ú
ÈôË͸ߵçƽ£¬±íʾûÓнÓÊÕµ½£¬´«ËÍÒì³£ ½áÊø·¢ËÍ
STORE_SCL 0 STORE_SCLΪµÍµçƽʱ£¬STORE_SDAÉÏÊý¾Ý²ÅÔÊÐí±ä»¯(¼´ÔÊÐíÒÔºóµÄÊý¾Ý´«µÝ£©
return ack_bit ·µ»ØAT24CxxÓ¦´ðλ
}
***************************************************
º¯Êý¹¦ÄÜ£º´ÓAT24Cxx¶ÁÈ¡Êý¾Ý
³ö¿Ú²ÎÊý£ºx
***************************************************
unsigned char ReadData()
´ÓAT24CxxÒÆÈëÊý¾Ýµ½MCU
{
unsigned char i
unsigned char x ´¢´æ´ÓAT24CxxÖжÁ³öµÄÊý¾Ý
for(i 0 i < 8 i++)
{
STORE_SCL 1 STORE_SCLÖÃΪ¸ßµçƽ
x<<1 ½«xÖеĸ÷¶þ½øλÏò×óÒÆһλ
x|(unsigned char)STORE_SDA ½«STORE_SDAÉϵÄÊý¾Ýͨ¹ý°´Î»¡°»ò¡°ÔËËã´æÈëxÖÐ
STORE_SCL 0 ÔÚSTORE_SCLµÄϽµÑضÁ³öÊý¾Ý
}
return(x) ½«¶ÁÈ¡µÄÊý¾Ý·µ»Ø
}
***************************************************
º¯Êý¹¦ÄÜ£ºÏòAT24CxxµÄµ±Ç°µØַдÈëÊý¾Ý
Èë¿Ú²ÎÊý£ºy (´¢´æ´ýдÈëµÄÊý¾Ý£©
***************************************************
ÔÚµ÷ÓôËÊý¾ÝдÈ뺯ÊýÇ°ÐèÊ×Ïȵ÷ÓÿªÊ¼º¯Êýstart()ËùÒÔSTORE_SCL0
void WriteCurrent(unsigned char y)
{
unsigned char i
for(i 0 i < 8 i++) Ñ»·ÒÆÈë8¸öλ
{
STORE_SDA (bit)(y&0x80) ͨ¹ý°´Î»¡°Ó롱ÔËË㽫×î¸ßλÊý¾ÝË͵½S
ÒòΪ´«ËÍʱ¸ßλÔÚÇ°£¬µÍλÔÚºó
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SCL 1 ÔÚSTORE_SCLµÄÉÏÉýÑؽ«Êý¾ÝдÈëAT24Cxx
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
_nop_() µÈ´ýÒ»¸ö»úÆ÷ÖÜÆÚ
STORE_SCL 0 ½«STORE_SCLÖØÐÂÖÃΪµÍµçƽ£¬ÒÔÔÚSC£ÌÏßÐγɴ«ËÍÊý¾ÝËùÐèµÄ£¸¸öÂö³å
y << 1 ½«yÖеĸ÷¶þ½øλÏò×óÒÆһλ
}
}
***************************************************
º¯Êý¹¦ÄÜ£ºÏòAT24CxxÖеÄÖ¸¶¨µØַдÈëÊý¾Ý
Èë¿Ú²ÎÊý£ºadd (´¢´æÖ¸¶¨µÄµØÖ·£©£»dat(´¢´æ´ýдÈëµÄÊý¾Ý£©
***************************************************
void WriteSet(unsigned char add unsigned char datunsigned char i)
ÔÚÖ¸¶¨µØÖ·addr´¦Ð´ÈëÊý¾ÝWriteCurrent
{
start() ¿ªÊ¼Êý¾Ý´«µÝ
WriteCurrent(i) Ñ¡ÔñÒª²Ù×÷µÄAT24CxxоƬ£¬²¢¸æÖªÒª¶ÔÆäдÈëÊý¾Ý
Ask()
WriteCurrent(add) дÈëÖ¸¶¨µØÖ·
Ask()
WriteCurrent(dat) Ïòµ±Ç°µØÖ·£¨ÉÏÃæÖ¸¶¨µÄµØÖ·£©Ð´ÈëÊý¾Ý
Ask()
stop() Í£Ö¹Êý¾Ý´«µÝ
delaynms(4) 1¸ö×Ö½ÚµÄдÈëÖÜÆÚΪ1ms ×îºÃÑÓʱ1msÒÔÉÏ
}
***************************************************
º¯Êý¹¦ÄÜ£º´ÓAT24CxxÖеĵ±Ç°µØÖ·¶ÁÈ¡Êý¾Ý
³ö¿Ú²ÎÊý£ºx (´¢´æ¶Á³öµÄÊý¾Ý£©
***************************************************
unsigned char ReadCurrent(unsigned char i)
{
unsigned char x
start() ¿ªÊ¼Êý¾Ý´«µÝ
WriteCurrent(i) Ñ¡ÔñÒª²Ù×÷µÄAT24CxxоƬ£¬²¢¸æÖªÒª¶ÁÆäÊý¾Ý
Ask()
xReadData() ½«¶ÁÈ¡µÄÊý¾Ý´æÈëx
stop() Í£Ö¹Êý¾Ý´«µÝ
return x ·µ»Ø¶ÁÈ¡µÄÊý¾Ý
}
***************************************************
º¯Êý¹¦ÄÜ£º´ÓAT24CxxÖеÄÖ¸¶¨µØÖ·¶ÁÈ¡Êý¾Ý
Èë¿Ú²ÎÊý£ºset_addr
³ö¿Ú²ÎÊý£ºx
***************************************************
unsigned char ReadSet(unsigned char set_addrunsigned char i)
ÔÚÖ¸¶¨µØÖ·¶ÁÈ¡
{
start() ¿ªÊ¼Êý¾Ý´«µÝ
WriteCurrent(i) Ñ¡ÔñÒª²Ù×÷µÄAT24CxxоƬ£¬²¢¸æÖªÒª¶ÔÆäдÈëÊý¾Ý
Ask()
WriteCurrent(set_addr) дÈëÖ¸¶¨µØÖ·
Ask()
return(ReadCurrent(i)) ´ÓÖ¸¶¨µØÖ·¶Á³öÊý¾Ý²¢·µ»Ø
}
*
STORE_SDA 1 STORE_SDA1STORE_SCL1ʹÖ÷´ÓÉ豸´¦ÓÚ¿ÕÏÐ״̬
STORE_SCL 1
ÒÔÉÏÔÚ³õʼ»¯ÖÐд
secReadSet(2)¶Á³ö±£´æµÄÊý¾Ý¸³ÓÚsec
WriteSet(2sec) ÔÚ24c08µÄµØÖ·2ÖÐдÈëÊý¾Ýsec
*
#endif
333 时钟芯片程序
#ifndef _DS1302_H_
#define _DS1302_H_
*****************************************************
º¯Êý¹¦ÄÜ£ºÖ÷º¯Êý
***************************************************
*void main(void)
{
unsigned char secondminutehourdaymonthyear ·Ö±ð´¢´æÃç¡¢·Ö¡¢Ð¡Ê±£¬ÈÕ£¬Ô£¬Äê
unsigned char ReadValue ´¢´æ´Ó1302¶ÁÈ¡µÄÊý¾Ý
Init_DS1302() ½«1302³õʼ»¯
while(1)
{
ReadValue ReadSet1302(0x81) ´ÓÃë¼Ä´æÆ÷¶ÁÊý¾Ý
second((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F)½«¶Á³öÊý¾Ýת»¯
DisplaySecond(second) ÏÔʾÃë
ReadValue ReadSet1302(0x83) ´Ó·Ö¼Ä´æÆ÷¶Á
minute((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
DisplayMinute(minute) ÏÔʾ·Ö
ReadValue ReadSet1302(0x85) ´Ó·Ö¼Ä´æÆ÷¶Á
hour((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
DisplayHour(hour) ÏÔʾСʱ
ReadValue ReadSet1302(0x87) ´Ó·Ö¼Ä´æÆ÷¶Á
day((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
DisplayDay(day) ÏÔʾÈÕ
ReadValue ReadSet1302(0x89) ´Ó·Ö¼Ä´æÆ÷¶Á
month((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
DisplayMonth(month) ÏÔʾÔÂ
ReadValue ReadSet1302(0x8d) ´Ó·Ö¼Ä´æÆ÷¶Á
year((ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
DisplayYear(year) ÏÔʾÄê
}
}*
#include
#include
sbit SCLKP2^5 붨Òå1302оƬµÄ½Ó¿Ú£¬Ê±ÖÓÊä³ö¶Ë¿Ú¶¨ÒåÔÚP10Òý½Å
sbit DATAP2^6 붨Òå1302оƬµÄ½Ó¿Ú£¬Êý¾ÝÊä³ö¶Ë¶¨ÒåÔÚP11Òý½Å
sbit RSTP2^4 붨Òå1302оƬµÄ½Ó¿Ú£¬¸´Î»¶Ë¿Ú¶¨ÒåÔÚP12Òý½Å
*****************************************************
º¯Êý¹¦ÄÜ£ºÑÓʱÈô¸É΢Ãë
Èë¿Ú²ÎÊý£ºn
***************************************************
void delaynus(unsigned char n)
{
unsigned char i
for(i0i
*****************************************************
º¯Êý¹¦ÄÜ£ºÏò1302дһ¸ö×Ö½ÚÊý¾Ý
Èë¿Ú²ÎÊý£ºx
***************************************************
void Write1302(unsigned char dat)
{
unsigned char i
SCLK0 ÀµÍSCLK£¬ÎªÂö³åÉÏÉýÑØдÈëÊý¾Ý×öºÃ×¼±¸
delaynus(2) ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸
for(i0i<8i++) Á¬Ðøд8¸ö¶þ½øÖÆλÊý¾Ý
{
DATAdat&0x01 È¡³ödatµÄµÚ0λÊý¾ÝдÈë1302 µÍλÔÚÇ°£¬¸ßλÔÚºó
delaynus(2) ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸
SCLK1 ÉÏÉýÑØдÈëÊý¾Ý
delaynus(2) ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸
SCLK0 ÖØÐÂÀµÍSCLK£¬ÐγÉÂö³å
dat>>1 ½«datµÄ¸÷Êý¾ÝλÓÒÒÆ1λ£¬×¼±¸Ð´ÈëÏÂÒ»¸öÊý¾Ýλ
}
}
*****************************************************
º¯Êý¹¦ÄÜ£º¸ù¾ÝÃüÁî×Ö£¬Ïò1302дһ¸ö×Ö½ÚÊý¾Ý
Èë¿Ú²ÎÊý£ºCmd£¬´¢´æÃüÁî×Ö£»dat£¬´¢´æ´ýдµÄÊý¾Ý
***************************************************
void WriteSet1302(unsigned char Cmdunsigned char dat)
{
RST0 ½ûÖ¹Êý¾Ý´«µÝ
SCLK0 È·±£Ð´Êý¾ÓÇ°SCLK±»ÀµÍ
RST1 Æô¶¯Êý¾Ý´«Êä
delaynus(2) ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸
Write1302(Cmd) дÈëÃüÁî×Ö
Write1302(dat) дÊý¾Ý
SCLK1 ½«Ê±ÖÓµçƽÖÃÓڸߵçƽ״̬
RST0 ½ûÖ¹Êý¾Ý´«µÝ
}
*****************************************************
º¯Êý¹¦ÄÜ£º´Ó1302¶ÁÒ»¸ö×Ö½ÚÊý¾Ý
Èë¿Ú²ÎÊý£ºx
***************************************************
unsigned char Read1302(void)
{
unsigned char idat
delaynus(2) ÉÔ΢µÈ´ý£¬Ê¹Ó²¼þ×öºÃ×¼±¸
for(i0i<8i++) Á¬Ðø¶Á8¸ö¶þ½øÖÆλÊý¾Ý
{ dat>>1
if(DATA1) Èç¹û¶Á³öµÄÊý¾ÝÊÇ1
dat|0x80 ½«1È¡³ö£¬Ð´ÔÚdatµÄ×î¸ßλ
SCLK1 ½«SCLKÖÃÓڸߵçƽ£¬ÎªÏ½µÑضÁ³ö
delaynus(2) ÉÔ΢µÈ´ý
SCLK0 ÀµÍSCLK£¬ÐγÉÂö³åϽµÑØ
delaynus(2) ÉÔ΢µÈ´ý
}
return dat ½«¶Á³öµÄÊý¾Ý·µ»Ø
}
*****************************************************
º¯Êý¹¦ÄÜ£º¸ù¾ÝÃüÁî×Ö£¬´Ó1302¶ÁÈ¡Ò»¸ö×Ö½ÚÊý¾Ý
Èë¿Ú²ÎÊý£ºCmd
***************************************************
unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char dat
RST0 ÀµÍRST
SCLK0 È·±£Ð´Êý¾ÓÇ°SCLK±»ÀµÍ
RST1 Æô¶¯Êý¾Ý´«Êä
Write1302(Cmd) дÈëÃüÁî×Ö
datRead1302() ¶Á³öÊý¾Ý
SCLK1 ½«Ê±ÖÓµçƽÖÃÓÚÒÑ֪״̬
RST0 ½ûÖ¹Êý¾Ý´«µÝ
return dat ½«¶Á³öµÄÊý¾Ý·µ»Ø
}
*****************************************************
º¯Êý¹¦ÄÜ£º 1302½øÐгõʼ»¯ÉèÖÃ
***************************************************
void Init_DS1302(void)
{
unsigned char flag
flag ReadSet1302(0x81)
if(flag&0x80) { ÅжÏʱÖÓоƬÊÇ·ñ¹Ø±Õ
WriteSet1302(0x8E0x00) ¸ù¾Ýд״̬¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë²»±£»¤Ö¸Áî
WriteSet1302(0x80((5510)<<4|(5510))) ¸ù¾ÝдÃë¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëÃëµÄ³õʼֵ
WriteSet1302(0x82((5910)<<4|(5910))) ¸ù¾Ýд·Ö¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë·ÖµÄ³õʼֵ
WriteSet1302(0x84((2310)<<4|(2310))) ¸ù¾ÝдСʱ¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëСʱµÄ³õʼֵ
WriteSet1302(0x86((1810)<<4|(1810))) ¸ù¾ÝдÈռĴæÆ÷ÃüÁî×Ö£¬Ð´ÈëÈյijõʼֵ
WriteSet1302(0x88((610)<<4|(610))) ¸ù¾ÝдÔ¼ĴæÆ÷ÃüÁî×Ö£¬Ð´ÈëÔµijõʼֵ
WriteSet1302(0x8c((910)<<4|(910))) ¸ù¾ÝдÄê¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëÄêµÄ³õʼֵ
WriteSet1302(0x900xa5) ´ò¿ª³äµç¹¦ÄÜ Ñ¡Ôñ2Kµç×è³äµç·½Ê½
WriteSet1302(0x8E0x80) ¸ù¾Ýд״̬¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë±£»¤Ö¸Áî
}
}
Èç¹û²»Ïëÿ´Î¶¼³õʼ»¯Ê±¼ä£¬Ò²¾ÍÊǵôµçºó»¹ÏëÈÃʱÖÓ¼ÌÐø×ßʱµÄ»° ¾ÍÓÃÉÏÃæµÄÓï¾ä
*ÕâÊÇÿ´Î¶¼³õʼ»¯µÄÓï¾ä*
*
WriteSet1302(0x8E0x00) ¸ù¾Ýд״̬¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë²»±£»¤Ö¸Áî
WriteSet1302(0x80((5510)<<4|(5510))) ¸ù¾ÝдÃë¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëÃëµÄ³õʼֵ
WriteSet1302(0x82((5910)<<4|(5910))) ¸ù¾Ýд·Ö¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë·ÖµÄ³õʼֵ
WriteSet1302(0x84((2310)<<4|(2310))) ¸ù¾ÝдСʱ¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëСʱµÄ³õʼֵ
WriteSet1302(0x86((1810)<<4|(1810))) ¸ù¾ÝдÈռĴæÆ÷ÃüÁî×Ö£¬Ð´ÈëÈյijõʼֵ
WriteSet1302(0x88((610)<<4|(610))) ¸ù¾ÝдÔ¼ĴæÆ÷ÃüÁî×Ö£¬Ð´ÈëÔµijõʼֵ
WriteSet1302(0x8c((910)<<4|(910))) ¸ù¾ÝдÄê¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´ÈëÄêµÄ³õʼֵ
WriteSet1302(0x900xa5) ´ò¿ª³äµç¹¦ÄÜ Ñ¡Ôñ2Kµç×è³äµç·½Ê½
WriteSet1302(0x8E0x80) ¸ù¾Ýд״̬¼Ä´æÆ÷ÃüÁî×Ö£¬Ð´Èë±£»¤Ö¸Áî
*
#endif
结
基单片机IC卡智水表控制系统逻辑加密IC卡实现水收费电子化设计采51单片机控制全动运行成较低方便运行理简单保护功齐全整系统结构紧凑芯片少控制精度高IC卡接口电路片外数存储器接口电路显示电路采串行方式减单片机口线口线单片机成节约成开支减PCB版电源电路采稳压5V电济实惠性稳定年限长
系统采51单片机核心处理单元IC卡插入时候触动卡插槽开关单片机开始读取IC卡识码识码验证通证明水卡该水表然开始读取IC水量读取动单片机连接存储器值进行累加然液晶显示累计水量剩水量月水量月水量月初号0000 动清零月份识采DS1302时钟芯片进行读取时间信息水量剩余定量时出发蜂鸣器报警LED发光声光报警
总说述设计够较完成设计务基实现设计求力限设计中难免存定缺陷请位专家批评指正着水资源日益紧张IC卡智水表特优点(先先收费供水解决工抄表麻烦等)必成水表中流着市场前景
致谢
文完稿余心情激动已久久静衷感谢毕业设计指导老师学阶段文选题资料查询开题研究撰写环节充分老师悉心指导帮助老师知识欠缺时候认真详细予帮助老师高深知识限责感高尚教师风范感触里毕业答辩评审组位专家教授老师表示深深谢意
年帮助教育鼓励系部老师表示真诚谢意学令留恋光阴里仅传授做学问秘诀传授做准终生受益
衷心感谢帮助室友学朋友鼓励帮助学轻松解决种困难更感谢父母家您养育支持利完成学业会生时间报答养育恩辜负您厚
祝老师学身体健康事业成
参考文献
[1] 吴志成肇启明马步青等国智化水表应现状发展方[J]中国水排水200315(9):1921
[2] 沈卫红单片机应系统设计实例分析[M]北京:北京航空航天学出版社2003 119159
[3] 赵四海IC卡智水表[J]动化仪表200223(11)3638
[4] 张淑清姜万录基CAN总线智水表动抄收系统[J]福建电脑20038(1)3435
[5] 立民单片机中级教程原理应[M] 北京:北京航空航天学出版社1999 1619
[6] 马修水 Wiegand传感器原理应[J] 仪表技术传感器19997(9)67
[7] 韩杰李慧杨晓红智水表电控系统设计[J]吉林工学院学报200223(3)2325
[8] 戴永微机控制技术[M]长沙:湖南学出版社19989093
[9] 雷建军赵明富黄刚等二线串行E2PROM原理AT89C2051接口编程[J]重庆工学院学报17(3)4043
[10] 张寅刚单片机实现通存贮器IC卡读写[J]电子工程师200127(6)36
[11] 马云峰穆效江陈子夫等 IC卡智水表设计[J]动化仪器仪表200017(1) 4850
[12] 庞英曹海建动态显示电路AT89C2051中应[J] 青岛学学报(工程技术版) 200419(1)7072
[13] 皱振春董国增MCS51系列单片机原理接口技术[M]北京机械工业出版社200056
[14] Wang Ren IC Card Intelligent Water Meter Design and Implementation [J]Instrumentation Technology20038(9)517
[15] 廖义勇超级电容应-智水表[J]应电子200316(7)30
[16] 李素康单片机实现精确计量智水表[J]企业技术开发200524(6)2325
[17] 付家单片机控制工程实践技术[M]北京:化学工业出版社200417
[18] YuJinHuangJiwuYuanLanying The Application of Multitasking Mechanismin Single Chip Computer System[J] Wuhan University Journal of Natural Sciences19994(1)5760
附录
附录1 原理图
附录2程序
#include reg52h
#include LCD12864h
#include LCD12864c
#include DS1302h
#include 24C08h
sbit ICkeyP2^2
sbit bellP1^0
sbit DCFP2^3
void delay(uchar xms)
unsigned char LJYSBYYSKYSICYSÓÃÀ´´æ·ÅÀÛ¼ÆÓÃË®£¬±¾Ô£¬¿ÉÓÃË®£¬ICË®Á¿
void main()
{
unsigned char daymonthyear ·Ö±ð´¢´æÈÕ£¬Ô£¬Äê
unsigned char ReadValue ´¢´æ´Ó1302¶ÁÈ¡µÄÊý¾Ý
unsigned char str_time[9]ÓÃÓÚ´æ·ÅÕû¸öÄêÔÂÈÕʱ¼ä
unsigned char dayflag
unsigned char str_LJYS[6]str_KYS[6]str_BYYS[6]
EA1
EX01
IT01
init_lcd()
clrram_lcd()12864Òº¾§³õʼ»¯
gotoxy(00)
print(20)ÔÚµÚÒ»ÐÐÏÔʾÄêÔÂÈÕ
gotoxy(10)
print(ÀÛ¼ÆÓÃË®)
gotoxy(20)
print(±¾ÔÂÓÃË®)
gotoxy(30)
print(¿ÉÓÃË®)
Init_DS1302() ½«1302³õʼ»¯
STORE_SDA 1 STORE_SDA1STORE_SCL1ʹÖ÷´ÓÉ豸´¦ÓÚ¿ÕÏÐ״̬
STORE_SCL 1 24C08³õʼ»¯ 2´æIC¿¨ 3 ¿ÉÓÃË® 4 ±¾ÔÂÓÃË® 5ÀÛ¼ÆÓÃË®
while(1)
{
ReadValue ReadSet1302(0x8d) ´ÓÄê¼Ä´æÆ÷¶Á
year((ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
ReadValue ReadSet1302(0x89) ´ÓÔ¼ĴæÆ÷¶¶Á
month((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
ReadValue ReadSet1302(0x87) ´ÓÈռĴæÆ÷¶Á
day((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F) ½«¶Á³öÊý¾Ýת»¯
str_time[0]year10+0x30
str_time[1]year10+0x30
str_time[2]''½«ÈÕÊý¾Ýת»»ÎªÒº¾§¿É¶ÁÊý¾Ý
str_time[3]month10+0x30
str_time[4]month10+0x30
str_time[5]''½«ÈÕÊý¾Ýת»»ÎªÒº¾§¿É¶ÁÊý¾Ý
str_time[6]day10+0x30
str_time[7]day10+0x30
str_time[8]'\0'½«ÈÕÊý¾Ýת»»ÎªÒº¾§¿É¶ÁÊý¾Ý
gotoxy(01)
print(str_time)
if(day1)
{
if(dayflag0)
{
WriteSet(40OP_WRITE)½«IC¿¨ÄÚ±¾ÔÂË®Á¿Çå0´æ´¢µ½ÏµÍ³ROMÄÚ
dayflag1
}
}
else
{
dayflag0
}
if(ICkey0)ÅжÏIC¿¨ÊÇ·ñ²åÈ룬Èç¹û²åÈë
{
delay(5)
if(ICkey0)
{
ICYSReadSet(2IC_READ)¶ÁÈ¡IC¿ªÄÚË®Á¿
if(ICYS0)Èç¹ûIC¿¨ÄÚË®Á¿²»µÈÓÚ0
{
WriteSet(2ICYSOP_WRITE)½«IC¿¨ÄÚË®Á¿´æ´¢µ½ÏµÍ³ROMÄÚ
WriteSet(2ICYSIC_WRITE)ÔÙ½«IC¿¨ÄÚÊý¾ÝÇå0 µØÖ·2ÓÃÓÚ´æ·ÅIC¿¨ÄÚ´æÈëµÄÊý¾Ý
KYSReadSet(3OP_READ)½«ROMÄÚ¿ÉÓÃË®Á¿¶Á³öÀ´
KYSICYS+KYS¿ÉÓÃË®¾Í±äΪÁ˱¾À´¿ÉÓÃË®Á¿+IC¿¨ÄÚ¶ÁÈ¡µÄË®Á¿
WriteSet(3KYSOP_WRITE)½«IC¿¨ÄÚ¿ÉÓÃË®Á¿´æ´¢µ½ÏµÍ³ROMÄÚ
}
}
while(ICkey)µÈ´ýIC¿¨°Î³ö
}
if(KYS<1)Èç¹û¿ÉÓÃˮûÓÐÁË µç´Å·§¶¯×÷¹ØË®
{
DCF0
}
else if(KYS<10)ÅжϿÉÓÃË®ÊÇ·ñСÓÚ10¶Ö£¬Èç¹ûСÓÚ10¶Ö£¬¾ÍÉù¹â±¨¾¯
{
DCF1
bell0
delay(200)
bell1
delay(200)
}
elseÈç¹ûÓÃË®Á¿³ä×㣬¾Í¼ÌÐøÓÃË®£¬Ò»ÇÐÕý³£
{
DCF1
bell1
}
str_LJYS[0]LJYS10000+0x30
str_LJYS[1]LJYS100001000+0x30
str_LJYS[2]LJYS1000100+0x30
str_LJYS[3]LJYS10010+0x30
str_LJYS[4]LJYS10+0x30
str_LJYS[5]'\0'
str_KYS[0]KYS10000+0x30
str_KYS[1]KYS100001000+0x30
str_KYS[2]KYS1000100+0x30
str_KYS[3]KYS10010+0x30
str_KYS[4]KYS10+0x30
str_KYS[5]'\0'
str_BYYS[0]BYYS10000+0x30
str_BYYS[1]BYYS100001000+0x30
str_BYYS[2]BYYS1000100+0x30
str_BYYS[3]BYYS10010+0x30
str_BYYS[4]BYYS10+0x30
str_BYYS[5]'\0'
gotoxy(15)
print(str_LJYS)
gotoxy(25)
print(str_BYYS)
gotoxy(34)
print(str_KYS)
}
}
void delay(uchar xms)
{
unsigned char ij
for(i0i
}
void ex0() interrupt 0Èç¹ûÔÚÓÃË®
{
KYS
LJYS++
BYYS++
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档