自动打铃控制器

合集下载

自动打铃器

自动打铃器

自动打铃器 (3)自动打铃器是一种能够根据预设的时间或者条件自动触发铃声的装置。

在各种不同的场合,自动打铃器都扮演着重要的角色,如学校上下课,公司上下班,定时提醒等。

下面我们将从几个方面详细介绍自动打铃器的原理、应用和未来的发展趋势。

一、自动打铃器的原理自动打铃器主要利用定时器或者计数器来控制电路的运行,以达到自动触发铃声的目的。

根据不同的原理,自动打铃器可以分为机械式和电子式两种。

1.机械式自动打铃器机械式自动打铃器主要利用钟表机构或者定时器齿轮等机械部件来控制时间,当达到预设时间时,通过机械连杆带动铃铛发出铃声。

这种打铃器一般需要手动上链或者拨动开关来启动,同时也有一定的误差存在。

2.电子式自动打铃器电子式自动打铃器则是利用电子电路来控制时间,常用的有数字电路和单片机等。

数字电路通过设定不同的时间参数来实现定时打铃,而单片机则可以通过编程来实现更为复杂的控制逻辑,如铃声的持续时间、间隔时间等。

二、自动打铃器的应用自动打铃器被广泛应用于各种场合,如学校、公司、车站、码头等。

在学校中,自动打铃器可以用来控制上下课的时间,提高学校的教学管理水平;在公司中,自动打铃器可以用来控制上下班的时间,提高公司的工作效率;在车站、码头等场合,自动打铃器可以用来通知乘客列车或船只的开行时间等。

此外,自动打铃器还可以用于定时提醒,如定时叫醒、定时吃药等。

在一些工业生产中,也需要用到自动打铃器来控制生产节拍和时间,提高生产效率。

三、自动打铃器的未来发展趋势随着科技的不断发展,自动打铃器也在不断升级换代,未来将会有更多新的技术应用到自动打铃器中。

1.网络化未来的自动打铃器将会更加网络化,可以通过互联网进行远程控制和监控。

例如,在车站、码头等场合,管理员可以通过互联网远程控制打铃器的开关和铃声持续时间等参数,以适应不同的情况和需求。

2.智能化未来的自动打铃器将会更加智能化,可以利用人工智能技术实现自我学习和自我调整。

例如,通过机器学习和大数据分析技术,自动打铃器可以学习用户的使用习惯并自动调整参数,为用户提供更加智能化的服务。

自动打铃控制器的PLC控制系统设计

自动打铃控制器的PLC控制系统设计

自动打铃控制器的P L C 控制系统设计-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN设计任务书一.课题名称:自动打铃控制器的设计二.概述目前,学校打铃系统的控制均有专用的控制器,这种控制器由单片机或数字系统组成。

当然,用PLC控制也完全可以达到准确定时打铃的目的。

图1所示为PLC控制自动打铃系统组成框图。

图1 PLC控制自动打铃系统组成框图根据学校作息时间表,该控制系统的要求具体如下:(1)上课铃与下课铃要能分开(铃声响的频率不一样),起床、晚自习等时间的铃声为连续打铃,每次打铃的时间为15s。

(2)要具备时间调整功能。

(3)星期六、星期日不打铃,星期一至星期五按表1所示作息时间打铃。

(4)具有时间显示功能,要有秒、分、时和星期的显示。

表1 作息时间表1.根据题意,设计该PLC控制系统。

2.PLC选择及I/O及其它PLC元器件分配。

3.选择电器元件,编制元件目录表。

4.绘制梯形图。

5.用计算机绘制主电路图、PLC控制电路图、电器元件布置图。

6.编写设计说明书及设计小结。

四.设计方案提示1.电子钟程序电子钟程序分别设有秒、分显示(00~59),时显示(00~23)和星期显示(1~6、日)。

其中电子钟计数功能可采用移位指令实现,0~9显示译码电路可用组合逻辑功能完成。

“00~59”六十进制秒、分计数的个位向十位进位的处理方法是:当个位计数到9,第10个脉冲到来时,个位数应该显示0,而十位数应显示1,这是两位数的显示应为10。

对于时显示00~23及星期一至星期日的进位方法处理类似。

有区别的是星期日显示可用数字“”表示,即星期日显示不是显示数字“7”,而是显示数字“8”。

2.打铃程序要使电子钟在显示时间7:40时打铃,可以将7:40的特征码“1”找出来,再驱动一“定时器”电路,使定时器定时15s,打铃也将响应15s。

其余上课的特殊码处理方法相同。

而当下课时,将产生特征码“2”,驱动下课打铃“定时器”电路,打铃15s后停止,但此时打铃的铃声应和特征码“1”时(即上课)不同。

【推荐】电铃控制器说明书-范文模板 (9页)

【推荐】电铃控制器说明书-范文模板 (9页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==电铃控制器说明书篇一:电铃使用说明书1、概述目前在皮带运输巷和提升运输巷使用的信号装置大致有两类,一类是传统的隔爆型电磁式电铃;另一类是组合式声光信号电铃,其中有一些具有单工对讲功能。

后者在技术和功能上都有了较大发展,但要实现多水平信号区分、二级传送、安全灯自动转换等功能仍需要增设大量电缆及隔爆型三通、四通等,投资大、故障率高。

针对目前这种状况,我们研制生产了KXT23型数显通信声光信号装置。

该产品结构上为隔爆兼本安型设计,采用单片微控制器及调制解调技术,仅需一条四芯信号电缆,即能实现发出声、光信号、单工对讲、自动区分多水平、二级传送、红绿灯转换等功能。

技术领先、设计合理、一机多用。

可应用于皮带机巷和轨道运输巷,是目前声光信号装置中理想的更新换代产品。

2、主要技术参数3、主要功能3.1、发出声光信号、数显打点数功能在等机状态下,按下信号装置的“信号按钮”,联线上的各装置,均发出声光信号,并数字显示打点数(二级传送除外)。

3.2、自动实现二级传送功能将车房内的信号装置,设置为二级传送状态(将DTP2开关中“1”拨到数字侧,“2”拨到ON侧),井口发出打点信号时,车房及其它水平相应发出声光信号,并显示打点数;当其它水平打点时,车房内的信号装置,只有灯光及数字显示,而不发出打点声,也无127V电压输出,无须使用双联按钮,自动实现二级传送。

3.3、对讲呼叫功能在待机状态下,可实现单工对讲及呼叫功能。

按下信号装置对讲按钮,联线的所有信号装置均能听到讲话及呼叫,松开对讲按钮,信号装置均处于接收状态。

注:在绞车运行时,应禁止对讲呼叫,以免影响司机操作。

3.4、多水平数显功能将每台信号装置设置一个编码(如井口为“1”,一水平为“2”,车房不设置等),按下信号装置“信号按钮”后,其它所有联机装置都数显打点位置的编码,同时根据编码的不同而发出不同的音调,无须增加任何电缆及设备,自动实现多水平的信号区分。

SF-128F型电脑程控打铃器详细介绍

SF-128F型电脑程控打铃器详细介绍

详细介绍针对广大学校等单位的要求,我们对SF-128F型电脑程控打铃器进行了大规模改进,使程序输入变得轻松、方便,新增了程序保持功能,在任何情况下都能保持程序永不丢失;具备音乐打铃功能,可根据设定时间自动打开功放播放音乐。

1、基本功能:本机能够按照我们事先设定的时间自动打开功放并播放所选音乐,每天可设置128次,四种音乐打铃时间长度可分别在0-99秒间任意设置,四种音乐可任意选择,不同时刻打铃音乐可不相同。

2、有多种编程模式供选择,每天都打铃,单休日不打铃、双休日不打铃,任一天打铃,且每天程序可不一样。

3、手动功能:能够在任何情况下手动打铃或响音乐。

4、具有“单点擦除”功能。

使用方法一、接线方法:本机机后电源插座直接输出220V交流电(直接接电铃两端或扩音机、功放机电源);音频输出插座可接到扩音机、功放机的CD输入端。

二、安装电池:打开机器底部电池盖板,装入3节5号电池(停电保持时钟走时);接通220V电源,屏幕显示“07:00”,秒点闪动,如果通电后不出现“07:00”,可同时按两个“复位”键进行复位,直至出现“07:00”。

三、时钟使用说明:⑴调星期:正常走时状态下,按“星期”键调星期,按一下调整一天。

⑵调时分:按“+”键调时、分,按一下加一,按住5秒钟不放转为快加;按“-”键调时、分,按一下减一,按住5秒钟不放,转为快减。

注:调整时分后,秒钟自动清零,即从该时刻的0秒开始走时。

四、简单编程(实例):编程前先列好时间表(如下表)。

设置音乐1响铃20秒,音乐2响铃16秒,音乐3响铃12秒,音乐4响铃8秒。

⑴清除内部程序:按“编程”键3秒,屏幕显示“Y-:15”,星期灯全闪,音乐1灯亮,按“确认”键,显示“07:00”,再按“清除”键3秒清除内部所有程序直至显示“Y-:15”,进入星期及音乐设置模式状态。

⑵星期模式设置:按“星期”键,直至星期一至日灯全闪,表示一周七天全打铃。

⑶音乐模式设置:音乐灯1亮,显示“Y-:15”按“+”5次调整至显示“Y-:20”;再按“音乐2”,音乐2灯亮,按“+”1次调整直至显示“Y-:16”;再按“音乐3”,音乐3灯亮,按“-”3次调整至显示“Y-:12”;再按“音乐4”,音乐4灯亮,按“-”7次调整至显示“Y-:08”,按“确认”键,星期模式及音乐模式设置的信息存入打铃器中,此时星期灯全闪,显示“07:00”表示进入打铃点设置状态。

PLC课程设计题目

PLC课程设计题目

可编程控制器原理及应用课程设计题目1. 设计抢答器PLC控制系统。

控制要求:1)抢答台A、B、C、D,有指示灯,抢答键。

2)裁判员台,指示灯,复位按键。

3)抢答时,有2S声音报警。

4)用数码管显示抢中的组号。

2设计两台电动机顺序控制PLC系统。

控制要求:两台电动机相互协调运转,M1运转10S,停止5S,M2要求与M1相反,M1停止M2运行,M1运行M2停止,如此反复动作3次,M1和M2均停止。

3.设计交通红绿灯PLC控制系统。

控制要求:1)东西向:绿5S,绿闪3次,黄2S;红10S。

2)南北向:红10S,绿5S,绿闪3次,黄2S。

4设计彩灯顺序控制系统。

控制要求:1)A亮1S,灭1S;B亮1S,灭1S;2)C亮1S,灭1S;D亮1S,灭1S。

3)A、B、C、D亮1S,灭1S。

4)循环三次。

5.用PLC对自动售汽水机进行控制,工作要求:1)此售货机可投入1元、2元硬币,投币口为LS1,LS2;2)当投入的硬币总值大于等于6元时,汽水指示灯L1亮,此时按下汽水按钮SB,则汽水口L2出汽水12秒后自动停止。

3)不找钱,不结余,下一位投币又重新开始。

6.设计电镀生产线PLC控制系统.控制要求:1)SQ1—SQ4为行车进退限位开关,SQ5—SQ6为上下限为开关。

2)工件提升至SQ5停,行车进至SQ1停,放下工件至SQ6,电镀10S,工件升至SQ5停,滴液5S,行车退至SQ2停,放下工件至SQ6,定时6S,工件升至SQ5停,滴液5S,行车退至SQ3停,放下工件至SQ6,定时6S,工件升至SQ5停,滴液5S,行车退至SQ4停,放下工件至SQ6。

3)完成一次循环。

7.皮带运输机传输系统有一3台皮带运输机传输系统,分别用电动机M1、M2、M3带动,控制要求如下:按下起动按钮,先起动最末一台皮带机M3,经5S后再依次起动其它皮带机。

正常运行时,M3、M2、M1均工作。

按下停止按钮时,先停止最前一台皮带机M1,待料送完毕后再依次停止其它皮带机。

自动打铃器使用说明

自动打铃器使用说明

;将原来的自动光照控制器,改进成自动打铃控制器
;仍然可以记录32次,每次操作使电铃响10秒
;液晶显示时分秒,按钮设置打铃时刻
;使用方法:
;临时打铃:按临时打铃按钮,铃响;放开则铃停
;对表:按对表按钮,出现闪动显示的项目,再按向上(或向下),改变闪动项目;再按增加(或减少)按钮调整当前项目值
;对表时可以调整的项目有:星期-月-日小时-分-秒
;定时设定:可以设定的项目有:小时-分,序号只是个便于区别的记录号,与打铃顺序无关
;按定时设定按钮,出现闪动的项目,按向上(或向下)可以改变闪动项目,按增加(或减少)可以修改当前闪动项目的值
;再次按对表(或设定)按钮则退出对表(或设定)状态,对表(或设定)状态下,5秒不操作自动退出
;自动打铃时间到,会响铃10秒
;一个记录的小时设置为24,这个记录就不用
;走时误差的调整:
;进入对表状态后,按一下临时打铃键,进入快慢调整状态,再同时按下上下左右四个键,就可以开始调整快慢啦
;此时,按一下向上键,调整数值加1,按一下向下键,调整数值减1,达到你需要的数值,等待2秒,自动完成调整
;调整数值一个负数,每24小时慢1.728秒,一个正数,每24小时快1.728秒。

;打铃时间的调整:
;进入定时设定,按临时打铃键,进入打铃时间调整状态,按增加键秒数增加,按减少键秒数减少
;秒数合适后,等待2秒,自动完成。

最多50秒。

;单片机采用AT89C2051
;晶振采用6MHz ,机器周期=2μs(微秒)
;显示格式变,定时器0方式一, 时-分-秒 11-43-35 星期月日4 05_22
以下是电路原理图。

基于PLC的自动打铃控制器设计

基于PLC的自动打铃控制器设计

《电气控制与PLC》课程设计说明书基于PLC的自动打铃控制器设计学生姓名学生学号学院名称专业名称电气工程及其自动化指导教师2013年11月29日摘要在学校和很多公司单位都能看到电铃,它们被用来作为上下课、上下班等作息时间的信号.随着社会的发展,不仅电铃的需求量多了而且对其的要求也高了.通过不同方式控制的自动打铃系统逐一被设计出来。

本文介绍的是三菱PLC控制的作息时间自动打铃控制系统,详细地阐述了系统的组成、系统硬件接线和系统软件设计,并详细介绍了系统工作原理。

该系统具有外设电路配置简单、扩展方便、操作容易,可靠性高实用性强等特点。

该系统用于学校电铃的自动控制,具有周末和假期控制功能和星期与时间的显示功能,实现了作息时间无人控制的自动化、科学化管理与操作.关键词 PLC;电铃;控制系统;软件设计目录1 绪论 01.1课题设计的背景 01.2 课题设计的目的和意义 02 设计任务 (3)2.1 设计题目 (3)2。

2 设计要求 (3)3 系统总体设计 (3)3。

1 系统概述 (3)3。

2 机型的选择 (3)3.3 设计方案 (5)3。

3。

1 控制任务分析 (6)3。

3。

2 TD-200的设置 (6)3。

4 电铃电路简单介绍 (7)3。

5 编程元件地址分配 (8)3。

5.1 输入输出继电器地址分配 (8)3。

5。

2 其他元件地址分配 (8)3.5。

3 输入输出接线图 (9)4 软件设计 (10)4。

1 计算机辅助设计编程 (10)4.2 设计步骤流程图 (10)4.3 总体程序的设计 (10)结论 (15)心得 (16)参考文献 (17)1 绪论1。

1 课题设计的背景电铃作为常用的作息时间信号,铃声已日益成为人们生活中的一部分。

铃声作为作息时间信号,最原始的控制方式就是人工控制。

按照作息时间表敲铃,以及后来出现了电铃但没有能实现自动控制也是由人工按电钮开关来电铃发出铃声都是人工控制方式。

随着计算机技术、自动控制技术和通讯技术的发展,出现了新兴的技术—电气控制与可编程控制技术,而计算机向微型方向的一个分支发展,则出现了主要是用于控制领域的单片机。

KG3028打铃控制器使用说明书

KG3028打铃控制器使用说明书

KG3028打铃控制器使用说明书一、产品特点1.内置3.6V/60MAh可充电池、工业级芯片,抗干忧强2.打铃数据在断电情况下可保存10年3.有键盘锁定不会出现人为因素误动作4.产品精度高、操作方便、安装简单5.本产品可设定、上课铃声(基本铃声)、下课铃声、预备铃声6.设定一至五十次打铃控制按周或天循环并随时可以控制打铃7.大屏幕LCD显示8.键盘设定,大功率输出9.除学校适用外、也特别适用于工厂等部门作息全自动打铃二、调试顺序1.打开钥匙液晶显示屏出现5:00,按住“时钟键”不放同时分别再按“校星期键”、“校时键”和“校时键”输入标准时间。

2.按“定时键”出现星期(七天全显示)表示每天工作。

如在一周内有几天作息时,再按“星期键”星期顺次跳动、在不需打铃那天跳动时、再按“取消键”,这天即不打铃,剩下的星期即循环打铃3.再按“定时键”分别按“校时键”和“校分键”设定第一次打铃时间,(再按“铃声转换键”分别上课铃、下课铃,预备铃状态)。

4.再按“定时键”同以上第3点方法设定第二次至五十次打铃时间和铃声状态5.如不需五十六次打铃定时按“时钟键:,返回标准时间6.如设定错误或取消设定按“取消键”,再按一次恢复原来的设定7.无设定时显示(--:--)8.检查:按“定时键”检查所设定的时间是否正确9.修改:请在该设定处按“取消键”,然后重新设定该次打铃时间10.结束检查:按“时钟键”结束检查及设定,显示标准时间11.手动控制:按“手动键”即可实再随意的打铃(基本铃声)12.铃声转换:在设定定时状态按“铃声转换键”分别上课铃、下课铃、预备铃13.锁定键盘:控制器调试完毕后,按“时钟键”不放同时再按“取消键”在显示器中下部出现三角形锁定符号放手,此除“手动键”可临时打铃外、其余一切按键不起作用(开锁时重复上述操作,锁定符号消失)。

14.连接方法:接上电铃、插上电源、面板上红灯亮表示控制器与电源接通,打开电源开关(ON方向),按一下“手动键“红绿灯亮同时电铃接通。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计课程单片机原理及应用课程设计题目自动打铃控制器院系电子科学学院专业班级学生姓名学生学号指导教师2011年3月 18 日目录1引言 (2)2设计要求 (3)2.1总体设计思想 (3)3.硬件电路设计思想 (3)3.1PCB图 (5)4.程序流程图 (5)5.程序清单 (6)6元器件明细表 (26)7.调试过程 (27)8.参考文献 (27)1引言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可用它来做一些控制电器一类不是很复杂的工作足矣了。

我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。

不过,这种电脑,通常是指个人计算机,简称PC机。

它由主机、键盘、显示器等组成。

还有一类计算机,大多数人却不怎么熟悉。

这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。

顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。

因为它体积小,通常都藏在被控机械的“肚子”里。

它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如产品未使用单片机或其它可编程逻辑器件上智能控制、实时工控、通讯设备、导航系统、家用电器等。

各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

今天我利用单片机控制学校的打铃系统,下面是我的设计思路2设计要求用单片机、数字温度传感器、实时时钟芯片、点阵液晶模块设计一个简易的自动打铃系统,系统工作时,在LCD显示器的第一行用16×16点阵的汉字显示“自动打铃系统”,第二行显示当前时间,第三行显示当前温度值,在随后的四行显示一页最近的打铃时间,即将要打铃的时间用黑底白字显示,如果该页的最后一个时间打过铃后,自动翻页,将下一页的4个打铃时间显示出来;用户可以通过按键修改当前时间或打铃时间;用户可以通过按指定键获知各键的功能。

2.1总体设计思想用TG12864B液晶模拟块设计一个简易的自动打铃系统,系统正常工作是,在LCD显示器的第一行用16*16的点阵的汉字显示“自动打铃系统”,第二行显示当前时间,第三行显示当前温度,在随后的四行显示一页的最近的打铃时间,即将要打铃的时间用黑底白字显示,如果该页的最后一个时间打过铃后,自动翻页,将下一个的4个打铃时间显示出来;用户可以通过按键修改当前时间或打铃时间。

利用KDOWN键进入HELP功能;打铃时用音乐声代替。

3.硬件电路设计思想分析:自动打铃系统的本质就是电子钟,如果当前的时间与打铃时间相同,就控制蜂鸣器发出打铃声。

虽然利用单片机本身的定时器也能够实现走时功能,但精度不够高,程序也比较复杂,而实时时钟芯片PCF8563能够轻松的解决以上问题。

由于打铃时间可能多达数十个,如果用户设置完打铃时间后将其保存在片内RAM中,一旦断电或重新启动,打铃时间又必须重新设置,为此可利用串行E²PROM 器件24C02来保存打铃时间。

另外用4个按键来设置当前时间和打铃时间。

系统正常工作时,按KDOWN键进入帮助菜单;按KSET键进入当前时间的设置,长按KSET键则进入打铃时间的设置;进入设置方式后,按KSET键移动光标,用黑底白字指示当前正在修改的时、分、秒,KINC,KDEC键分别对当前的修改对象加、减1,如果是修改的打铃时间,用KDOWN键对下一个打铃时间进行设置,长按KSET键退出当前时间或打铃时间的设置方式,回到正常状态。

电子钟是一个以“分”,“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和一些显示星期、报时、停电查看时间等附加功能。

因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,“星期”计数器、校时电路、报时电路和振荡器组成。

干电路系统由秒信号发生器、“时、分、秒、星期”计数器、译码器及显示器、校时电路、整点报时电路组成。

秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。

将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。

“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。

“时计数器”采用24进制计时器,可实现对一天24小时的累计。

每累计24小时,发出一个“星期脉冲”信号,该信号将被送到“星期计数器”,“星期计数器”采用7进制计时器,可实现对一周7天的累计。

译码显示电路将“时”、“分”、“秒”、“星期”计数器的输出状态送到七段显示译码器译码,通过七位LED七段显示器显示出来。

整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。

校时电路时用来对“时”、“分”、“秒”、“星期”显示数字进行校对调整的。

晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。

高级的精度更高。

有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,此外还有一校正电容可以对温度进行补偿,以提高频率准确度和稳定度,使稳定度优于10-4,可保证数字钟的走时准确及稳定,下面我画出硬件电路图,见附录1。

3.1PCB 图见附录2。

4.程序流程图5.程序清单文件I2C.C 的清单如下:#include <reg51.h> #include <intrins.h>YNNYPCF8563产生中断?NYNN 初始化定时器T0初始化外部中断0初始化液晶屏显示”自动打铃系统”显示当前时间显示当前温度开始将打铃时间从24C02中至数组alatime 中 初始化PCF8563允许定是、报警中断 写入当前时间 显示当前温度显示1页最近打铃时间 确定下一个要打铃的时间 将其设为PCF8563的报警时间将其以黑底白字方式显示KSET_LONG 键按下修改当前时间写入PCF8563KSET 键按下 KDOWN 键按下修改打铃时间写入24C02显示HELP 功能24C02中的打铃时间有效?从PCF8563读取当前时间,显示当前时间音乐声是否结束? 发DS18B20复位命令 发跳过ROM 命令 发启动温度转换命发DS18B20复位命令 发跳过ROM 命令发读暂存器指令 读取2字节的温度将温度值转换为BCD 码送显示缓存、调用显示程序 控制定时器T0产生方波将正在打铃时间以正常方式显示 指向下一个打铃时间 将其设为PCF8563的打铃时间 将其以黑底白字方式显示翻页KDOWN 键按下KINC 键按下 Y#define uchar unsigned char#define delay1us() _nop_()#define delay5us() _nop_();_nop_();_nop_();_nop_();_nop_()sbit SDA=P1^7; //P1.1模拟I2C总线的SDAsbit SCL=P1^6; //P1.0模拟I2C总线的SCLbit ack_mk; //应答标志位,有应答为1,无应答为0 void Start() /始信号/产生起{SDA=1; //将SDA、SCL置为1SCL=1;delay5us(); //起始条件建立时间大于4.7us,故延时5usSDA=0; //SCL为高时,SDA由高变低,发送起始信号delay5us(); //延时5usSCL=0; //SCL变低,准备发送或接收数据}void Stop() //产生停止信号{SDA=0; //将SDA清0, SCL置1SCL=1;delay5us(); //结束条件建立时间大于4.7us,所以延时5usSDA=1; //当SCL为高电平时,SDA由低变高,产生结束信号 delay5us(); //延时5usSCL=0;}void Ack(void) //产生应答信号{SDA=0; //SDA先清0,发应答信号SCL=1; //SCL由低变高,产生一个时钟delay5us(); //延时5usSCL=0; //时钟线SCL恢复到低电平,以便继续接收}void NAck(void) //产生非应答信号{SDA=1; //SDA先置1,发非应答信号SCL=1; //SCL由低变高,产生一个时钟delay5us(); //延时5usSCL=0; //时钟线SCL清恢复到低电平,以便继续接收}void SendByte(uchar c) //向I2C总线发送一个字节{uchar n ;for(n=0;n<8;n++) //一字节为8位,循环8次{if(c&0x80) SDA=1; //根据发送位将数据线SDA置为1或清0else SDA=0;SCL=1; //置SCL为高,通知被控从机开始接收数据位delay5us(); //延时5usSCL=0; //SCL变低电平,准备发送下一位数据c=c<<1; //将下一位要发送的数据移到最高位,先高后低}delay5us(); //延时5usSDA=1; //一字节发送完后释放数据线,准备接收应答位 delay5us();SCL=1; //SCL由低变高,产生一个时钟,读取SDA的状态 delay5us(); //延时5usif (SDA==1)ack_mk=0; //如果SDA=1,则发送失败,将ack_mk清0elseack_mk=1; //否则发送成功,将ack_mk置1SCL=0; //SCL变低}uchar RcvByte() //接收一个字节{uchar c;uchar n;for(n=0;n<8;n++) //一字节为8位,循环8次{ SDA=1; //置数据线SDA为输入方式,进入接收方式SCL=1; //SCL由低变高,产生一个时钟if (SDA==0) //根据数据线SDA的状态,将c的最高位清0或置1c=c&0x7f;elsec=c|0x80;c= _crol_(c,1); //将c循环左移一位,先接收高位,后接收低位 SCL=0; //时钟线SCL清0}return(c);}/*从指定器的的子地址开始写入多个字节*/bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no){uchar i;Start(); //启动总线SendByte(sla); /*发送器件地址*/if(ack_mk==0)return(0);SendByte(suba); /*发送器件子地址*/if(ack_mk==0)return(0);for(i=0;i<no;i++){SendByte(*s); /*发送数据*/if(ack_mk==0)return(0);s++;}Stop(); /*结束总线*/return(1);}/*从指定器的的子地址开始读取多个字节*/bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) {uchar i;Start(); /*启动总线*/SendByte(sla); /*发送器件地址*/if(ack_mk==0)return(0);SendByte(suba); /*发送器件子地址*/if(ack_mk==0)return(0);Start();SendByte(sla+1);if(ack_mk==0)return(0);for(i=0;i<no-1;i++){*s=RcvByte(); /*发送数据*/Ack(); /*发送就答位*/s++;}*s=RcvByte();NAck(); /*发送非应位*/Stop(); /*结束总线*/return(1);}文件LCD12864IO.C的清单如下:#include <reg51.h>#include <intrins.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned intsbit LCD_RST= P3^7; //液晶屏复位脚定义sbit DI=P3^4; //DI引脚定义sbit RW=P3^5; //RW引脚定义sbit CS=P3^3; //片选信号定义sbit EN=P3^6; //使能信号定义sbit RDY=P0^7; //对应状态信息中的BF位sfr LCD=0x80; //P0口作为数据口#define LCD_DISPON 0x3f // 打开LCD显示#define LCD_STARTROW 0xc0// 设置起始行,可用LCD_STARTROW+x设置起始行(x<64) #define LCD_ADDRSTRY 0xb8// 页起始地址,可用LCD_ADDRSTRX+x设置当前页(x<8)#define LCD_ADDRSTRX 0x40// 列起始地址,可用LCD_ADDRSTRY+x设置当前列(x<64)#define CS1 0 //左半屏选择#define CS2 1 //右半屏选择//命令字cmd送左半屏(port=0)/右半屏(port=1)命令口void LCD_WrCmd(bit port,uchar cmd){ EN=0;CS=port;DI=0; //选择命令寄存器RW=0;EN=1;LCD=cmd; //命令码送总线EN=0;}//数据wrdata送左半屏(port=0)/右半屏(port=1)数据口void LCD_WrDat(bit port ,uchar wrdata){ EN=0;CS=port;DI=1; //选择命令寄存器RW=0;EN=1;LCD=wrdata; //命令码送总线EN=0;}//以filldata充填液晶屏void LCD_DispFill(uchar filldata){ uchar x, y;LCD_WrCmd(CS1,LCD_STARTROW); //设置左半屏显示起始行为0LCD_WrCmd(CS2,LCD_STARTROW); //设置右半屏显示起始行为0for(y=0; y<8; y++) //循环充填8页{ LCD_WrCmd(CS1,LCD_ADDRSTRY+y); // 设置左半屏页地址LCD_WrCmd(CS1,LCD_ADDRSTRX); // 设置左半屏列地址LCD_WrCmd(CS2,LCD_ADDRSTRY+y); // 设置右半屏页地址LCD_WrCmd(CS2,LCD_ADDRSTRX); // 设置右半屏列地址for(x=0; x<64; x++) //充填每页的64个单元(列) { LCD_WrDat(CS1,filldata);LCD_WrDat(CS2,filldata);}}}//液晶模块初始化void LCD_DispIni(void){ uint i;LCD_RST = 0; // 复位驱动芯片for(i=0; i<500; i++);LCD_RST = 1;LCD_WrCmd(CS1,LCD_DISPON); // 打开显示LCD_WrCmd(CS1,LCD_STARTROW); // 设置显示起始行为0LCD_WrCmd(CS2,LCD_DISPON);LCD_WrCmd(CS2,LCD_STARTROW);LCD_DispFill(00); // 清屏LCD_WrCmd(CS1,LCD_ADDRSTRY+0); // 设置页(字符行)地址LCD_WrCmd(CS1,LCD_ADDRSTRX+0); // 设置列地址LCD_WrCmd(CS2,LCD_ADDRSTRY+0);LCD_WrCmd(CS2,LCD_ADDRSTRX+0);}//在液晶屏的cy(0-7)行、cx(0-15)列显示字符dispdatavoid LCD_DispChar(bit color,uchar cy, uchar cx, char dispdata) { uchar code *pch;uchar i;bit port;cy = cy&0x07; // 参数过滤cx = cx&0x0f;pch = &ASCII_TAB[(dispdata-0X20)*5]; //指向字符起始列的点阵码 if( (cx&0x08) == 0 ) // 列号cx<8,在左半屏显示{ port=CS1;i=cx<<3;}else{ port=CS2;i = (cx&0x07)<<3;}LCD_WrCmd(port,LCD_ADDRSTRX+i); // 设置当前列地址LCD_WrCmd(port,LCD_ADDRSTRY+cy); // 设置当前页地址for(i=0; i<5; i++); //延时if (color==0)LCD_WrDat(port,0x00); // 显示一列空格elseLCD_WrDat(port,0xff); // 显示一列空格for(i=0; i<5; i++) //送出字符的5列点阵码{ if(color==0)LCD_WrDat(port,*pch);elseLCD_WrDat(port,~*pch);pch++;}if (color==0)LCD_WrDat(port,0x00); // 显示一列空格elseLCD_WrDat(port,0xff); // 显示一列空格for(i=0; i<5; i++);if (color==0)LCD_WrDat(port,0x00); // 显示一列空格elseLCD_WrDat(port,0xff); // 显示一列空格}//在液晶屏的cy(0-7)行、cx(0-15)列显示字符disp_strvoid LCD_DispStr(bit color,uchar cy, uchar cx, char *disp_str){ while( *disp_str != '\0'){ cy = cy&0x07; // 参数过滤cx = cx&0x0f;LCD_DispChar(color,cy, cx, *disp_str); // 显示字符 disp_str++; // 指向下一字符数据cx++;if(cx>15) cy++; // 指向下一显示行}}//在液晶屏的cy(0-3)行、cx(0-7)列显示汉字字符dispdatavoid LCD_DispHZ(uchar cy, uchar cx, uchar dispdata){ uchar code *pdat;uchar i,s,page;bit port;cy = cy&0x03; // 参数过滤cx = cx&0x07;pdat = &HZTAB[dispdata*32];if( (cx&0x04) == 0 ) // 如果在左半屏显示{ port=0;s = cx<<4; // 求出该汉字在屏幕上的起始列}else //在右半屏上显示{ port=1;s = (cx<<4)-64; // 求出该汉字在屏幕上的起始列}for(page=0;page<2;page++) //每个汉字2页{ LCD_WrCmd(port,LCD_ADDRSTRX+s); // 设置当前列地址LCD_WrCmd(port,LCD_ADDRSTRY+(cy<<1)+page); // 设置当前页地址 for(i=0; i<5; i++);for(i=0; i<16; i++) //每个汉字16列{ LCD_WrDat(port,*pdat); // 发送数据pdat++;}for(i=0; i<5; i++);}}//在液晶屏的cy(0-3)行、cx(0-7)列显示汉字字符串disp_strvoid LCD_DispHZStr(uchar cy, uchar cx, uchar *disp_str){ while( *disp_str!=0xff){ cy = cy&0x03; // 参数过滤cx = cx&0x07;LCD_DispHZ(cy, cx, *disp_str); // 显示汉字 disp_str++; // 指向下一汉字cx++; //列号加1if(cx>7){ cy++; // 指向下一显示行cx=0;}}}void Help(void){Help2();while (1){ k=GetKey();if(k==KINC){m++;if(m%2==0){Help2();}else{Help1();}}else if(k==KDOWN){break;}}}bit reset(void) //初始化DS18B20{ bit err;DQ=0; //在数据线上产生600us的低电平 delay15(40);DQ=1; //数据线拉高delay15(4); //延时60userr=DQ; //读取数据线状态,err=0:复位成功 delay15(18); // err=1:复位失败 return(err);}void wrbyte(uchar d) //向DS18B20写入一个字节{ uchar i;dat=d;for(i=8;i>0;i--) //循环写8位(先低位,后高位){ DQ=0; //产生15us的负脉冲delay15(1);DQ=dat0; //将当前数据位送数据线dat=dat>>1; //将下一位要写入的数据移到最低位 delay15(1); //延时15usDQ=1; //数据线拉高,为写入下一位做准备 }}uchar rdbyte(void) //从DS18B20 读取一个字节{ uchar i;dat=0; //读出数据初值为0for(i=8;i>0;i--) //循环读8位(先低位,后高位){ dat=dat>>1; //读出数据先右移一位DQ=0; //产生1us的负脉冲_nop_();DQ=1; //数据总线拉高delay15(1); //延时15usdat7=DQ; //读取数据delay15(4); //延时,为读下一位做准备}return(dat);}void late() //延时700ms{ uchar i;for(i=0;i<200;i++) delay15(200);}void gettemp(void){ int temp;uchar zf;uchar h,l;reset(); //复位所有DS18B20wrbyte(0xcc); //跳过ROMwrbyte(0x44); //启动所有DS18B20转换late(); //延时750msreset(); // 复位wrbyte(0xcc); //发跳过ROM命令wrbyte(0xbe); //发读暂存器命令l=rdbyte(); //读取温度低字节、高字节 h=rdbyte();temp=h*256+l;zf=0;if(temp<0) //如果温度在0度以下{ zf=1; //置负数标志temp=-temp; //求补}dbuf[4]=dp[temp&0x0f]+0x30; //求出温度的小数 temp=temp>>4;dbuf[0]=temp/100+0x30; //求出百位temp=temp%100;dbuf[1]=temp/10+0x30; //求出十位dbuf[2]=temp%10+0x30; //求出个位dbuf[3]='.';if(zf==1){ if(dbuf[1]=='0'){ dbuf[0]=' ';dbuf[1]='-';}elsedbuf[0]='-';}else{ if(dbuf[0]=='0'){ if(dbuf[1]=='0')dbuf[1]=' ';dbuf[0]=' ' ;}}dbuf[5]='C';LCD_DispStr(0,3,4,dbuf);}文件自动打铃系统.C的清单如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define KSET 0xe0#define KSET_LONG 0xe1#define KINC 0xd0#define KDEC 0xb0#define KDOWN 0x70#define AT24C02 0xa0#define PCF8563 0xa2extern bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no);extern bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no);extern void LCD_DispIni(void);extern void LCD_DispFill(uchar filldata);extern void LCD_DispChar(bit color,uchar cy,uchar cx,char dispdata); extern void LCD_DispStr(bit color,uchar cy,uchar cx,char *disp_str); extern void LCD_DispHZ(uchar cy,uchar cx,uchar dispdata);extern void LCD_DispHZStr(uchar cy,uchar cx,uchar *disp_str);extern void gettemp(void);extern void Help(void);sbit SOUND=P1^5;uchar th,tl;uchar tiee;uint code tab1[]={64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217};/*uchar code tab3[]={0x42,0x82,0x82,0x82,0x84,0x02,0x72,0x62,//兰花草0x72,0x62,0x52,0x48,0xb2,0xb2,0xb2,0xb2,0xb4,0x02,0xa2,0x82,0xa2,0xA2,0x92,0x88,0x82,0xb2,0xb2,0xa2,0x84,0x02,0x72,0x62,0x72,0x62,0x52,0x44,0x02,0x12,0x12,0x62,0x62,0x52,0x44,0x02,0x82,0x72,0x62,0x52,0x32,0x48,0x00};*/uchar code tab3[]={0x64,0x64,0xa4,0xa4,0xb4,0xb4,0xa4,//小星星0x94,0x94,0x84,0x84,0x74,0x74,0x64,0xa4,0xa4,0x94,0x94,0x84,0x84,0x74,0xa4,0xa4,0x94,0x94,0x84,0x84,0x74,0x64,0x64,0xa4,0xa4,0xb4,0xb4,0xa4,0x94,0x94,0x84,0x84,0x74,0x74,0x64,0x00};uchar max[3]={24,60,60};uchar time[3]={05,50,55};uchar idata sbuf[5];uchar hzmsg[7]={0,1,2,3,4,5,0xff};uchar idata alatime[16][2]={{6,00},{6,46},{6,47},{6,48},{10,05},{10,45},{11,40},{13,30},{14,10},{14,50},{15,20},{16,00},{16,40},{17,20},{19,30},{21,00}};bit mk;void delay(uchar t){uchar i;while(t--)for(i=0;i<250;i++);}uchar HexBcd(uchar hex){return (((hex/10)<<4)|(hex%10));}uchar BcdHex(uchar bcd){uchar hex,hex1;hex=bcd&0x0f;hex1=(bcd>>4)*10;return (hex+hex1);}uchar Locate(void){uchar n;n=0;while(n<16){if(time[0]<alatime[n][0])break;else if((time[0]==alatime[n][0])&&(time[1]<=alatime[n][1])) break;n++;}if(n==16)n=0;return (n);}void LCD_DispDat(bit color,uchar cy,uchar cx,char dat){uchar str[3];str[0]=dat/10+0x30;str[1]=dat%10+0x30;str[2]=0;LCD_DispStr(color,cy,cx,str);}uchar GetKey(void){uchar key;uchar t;if((key=P2&0xf0)==0xf0)return 0xff;for(t=0;t<5;t++)delay(5);if((key=P2&0xf0)==0xf0)return 0xff;while((P2&0xf0)!=0xf0){delay(5);if(t<250)t++;}if((t>100)&&(key==0xE0))return 0xE1;return key;}void DispTime(void){LCD_DispDat(0,2,4,time[0]);LCD_DispChar(0,2,6,':');LCD_DispDat(0,2,7,time[1]);LCD_DispChar(0,2,9,':');LCD_DispDat(0,2,10,time[2]);}void DispAla(bit color,uchar no){LCD_DispDat(color,4+no%4,8,alatime[no][0]);LCD_DispChar(color,4+no%4,10,':');LCD_DispDat(color,4+no%4,11,alatime[no][1]); }void DispPage(uchar page){uchar i;for(i=0;i<4;i++){LCD_DispChar(0,4+i,3,'(');LCD_DispDat(0,4+i,4,page*4+i+1);LCD_DispChar(0,4+i,6,')');DispAla(0,page*4+i);}}void ReadTime(void){IRcvStr(PCF8563,0X01,sbuf,4);time[0]=BcdHex(sbuf[3]&0x3f);time[1]=BcdHex(sbuf[2]&0x7f);time[2]=BcdHex(sbuf[1]&0x7f);}void SetTime(void){sbuf[0]=HexBcd(time[2]);sbuf[1]=HexBcd(time[1]);sbuf[2]=HexBcd(time[0]);ISendStr(PCF8563,0X02,sbuf,3);}void SetAla(uchar i){sbuf[0]=HexBcd(alatime[i][1]);sbuf[1]=HexBcd(alatime[i][0]);ISendStr(PCF8563,0X09,sbuf,2);}void EditTime(void){uchar col=0;uchar k;ReadTime();DispTime();LCD_DispDat(1,2,4,time[col]);while(1){k=GetKey();if(k==KINC){time[col]++;if(time[col]==max[col])time[col]=0;LCD_DispDat(1,2,4+col*3,time[col]);}else if(k==KDEC){time[col]--;if(time[col]==0XFF)time[col]=max[col]-1;LCD_DispDat(1,2,4+col*3,time[col]);}else if(k==KSET){LCD_DispDat(0,2,4+col*3,time[col]);col=(col+1)%0x03;LCD_DispDat(1,2,4+col*3,time[col]);}else if(k==KSET_LONG){LCD_DispDat(0,2,4+col*3,time[col]);SetTime();break;}}}void EditAla(void){ uchar no=0;uchar col=0;uchar k;DispPage(0);LCD_DispDat(1,4+(no%4),8+col*3,alatime[no][col]);while(1){ k=GetKey();if(k==KINC){ alatime[no][col]++;if(alatime[no][col]==max[col])alatime[no][col]=0;LCD_DispDat(1,4+(no%4),8+col*3,alatime[no][col]);}else if(k==KDEC){ alatime[no][col]--;if(alatime[no][col]==0xff)alatime[no][col]=max[col]-1;LCD_DispDat(1,4+(no%4),8+col*3,alatime[no][col]);}else if(k==KSET){ LCD_DispDat(0,4+(no%4),8+col*3,alatime[no][col]);col=(col+1)&0x01;LCD_DispDat(1,4+(no%4),8+col*3,alatime[no][col]);}else if(k==KDOWN){ LCD_DispDat(0,4+(no%4),8+col*3,alatime[no][col]);no++;col=0;if(no==16) no=0;if(no%4==0)DispPage(no/4);LCD_DispDat(1,4+(no%4),8,alatime[no][col]);}else if(k==KSET_LONG){ for(no=0;no<4;no++){ ISendStr(AT24C02,no*8,&alatime[no*4][0],8);delay(20);}no=0x55;ISendStr(AT24C02,0xff,&no,1);break;}}}void int0(void) interrupt 0{ mk=1;}void timer0(void) interrupt 1{TH0=th;TL0=tl;SOUND=~SOUND;}void timer1(void)interrupt 3{TH1=-50000/256;TL1=-50000%256;tiee--;}void main(void){ uchar mm;uchar c;uchar i;uchar j=1;uchar k;mk=0;TMOD=0x11;TH0=-50000/256;TL0=-50000%256;ET0=1;ET1=1;TR1=1;EA=1;IT0=1;EX0=1;LCD_DispIni();LCD_DispHZStr(0,1,hzmsg);DispTime();gettemp();IRcvStr(AT24C02,0xff,&i,1);if(i==0x55)IRcvStr(AT24C02,0x00,&alatime[0][0],32);sbuf[0]=0;sbuf[1]=0x13;ISendStr(PCF8563,0x00,sbuf,2);SetTime();sbuf[0]=0x82;sbuf[1]=1;ISendStr(PCF8563,0x0e,sbuf,0x02);delay(20);i=Locate();DispPage(i/4);DispAla(1,i);SetAla(i);while(1){k=GetKey();if(k==KSET){EditTime();i=Locate();DispPage(i/4);DispAla(1,i);SetAla(i);}else if(k==KSET_LONG){EditAla();i=Locate();DispPage(i/4);DispAla(1,i);SetAla(i);}else if(k==KDOWN){j++;if(j%2==0){Help();EA=0;LCD_DispIni();LCD_DispHZStr(0,1,hzmsg);DispTime();gettemp();i=Locate();DispPage(i/4);DispAla(1,i);EA=1;j++;}else{LCD_DispIni();LCD_DispHZStr(0,1,hzmsg);DispTime();gettemp();i=Locate();DispPage(i/4);DispAla(1,i);EA=1;}}if(mk==1){ReadTime();mk=0;DispTime();if(TR0==0) gettemp();sbuf[0]=sbuf[0]&0xfb;ISendStr(PCF8563,0x01,sbuf,1);if(sbuf[0]&0x08){sbuf[0]=sbuf[0]&0xf7;ISendStr(PCF8563,0x01,sbuf,1);DispAla(0,i);i++;if(i==16) i=0;if(i%4==0)DispPage(i/4);DispAla(1,i);SetAla(i);mm=0;while(tab3[mm]){c=tab3[mm]>>4;if(c!=0){th=tab1[c-1]>>8;tl=tab1[c-1]&0xff;EA=0;TH0=th;TL0=tl;TR0=1;EA=1;}else{TR0=0;SOUND=1;}tiee=(tab3[mm]&0x0f)*2;while(tiee!=0);mm++;ReadTime();DispTime();}}TR0=0;}}}6元器件明细表元件规格数量TG12864B液晶模块128x641Led发光二极管slr4晶振11.0592 MHZ3电容10uf1330uf1二极管10三极管pnp6电阻 4.7k1110k61023蜂鸣器8Ω、0.5W2单片机sst89es8rd1开关按键开关164线与门74LS2127.调试过程(1)首先要确保液晶屏的正常显示,如果程序运行时液晶屏没有显示,应仔细检查液晶屏控制线的连接是否与程序中的定义一致。

相关文档
最新文档