首页 > 应用 > 单片机应用
[?#32423;羃在隧道窑温度控制系统、自助式寄存柜等多个实际应用中,我们利用单片机高级C语言编制应用程序,满足了用户对各项性能参数的不同要求。下面以一?#36947;?#20171;绍C语言在应用程序设计?#31995;?#20248;点。

1前言

在隧道窑温度控制系统、自助式寄存柜等多个实际应用中,我们利用单片机高级C语言编制应用程序,满足了用户对各项性能参数的不同要求。下面以一?#36947;?#20171;绍C语言在应用程序设计?#31995;?#20248;点。

2系统结构

系统由电器和机械两部分组成。机械部分由寄存柜箱位、电控锁组成;电器部分由单片机、控制继电器、操作面板、工作状态指示组成。系统结构如图1所?#23613;?/p>

 

3系统功能程序设计

系统程序有以下部分组成:主程序、存取程序、监控管理程序、控制输出程序、柜体箱位排序程序及键盘中断、时钟定时中断和报警程序。下面主要介绍箱位排序程序、存取程序?#22836;?#27490;密码重复程序。软件设计采用了模块化结构设计方法,所有程序采用单片机高级C语言编?#30784;?/p>

主程序完成各个外设接口初始化,然后,进入键盘采样处理显示程序,由时钟中断程序完?#19978;?#31034;扫描更?#24405;安?#26679;处理。下面是箱位号初始化子程序。

 

上述程序中的jICunnum[]变量用于保存箱位的箱位号,初?#38469;?#30340;jicunnum[i]=i(i=1,2,…,32),即所有的32个箱位分别设置为1,2,…,32,以便于箱位状态指示和接受继电器的输出控制,完成柜体箱位的闭锁控制,因为箱位电控锁的开启是按照箱位对应的箱位号进行操作的。例如,对应5号箱位初始号码为jicunnum[5]=5,其他?#26469;?#31867;推。

存放物品时,在有空箱位情况下,系统随机自动产生一个12位密码,并保存起来,同时将该密码打印出来由顾客自己随身携带。密码随机产生程序如下:

void Take(){

1.qq:Mimac=ReadKey();

2.if(Mimac!=0x11){

3.if(Mimacount

4.Mimac--;Mimac=c&0x00f;

5.display[Mimacount]=Mimac;

6.Mimatemp*=10;

7.Mimatemp+=Mimac;

8.Mimacount++;goto qq;}

9.goto endt;}

10.for(j=0;j

11.if(jicun[j]=Mimatemp){

12.orinum=j;}}

13.endt:return();}

上面程序中的第3行rand()是随机数发生子程序,程序中的2~4行随机自动产生一个12位密码,并以十进制的形式保存在变量Mimanew中。

为了防止本次产生的密码与当天已经产生的密码重复,程序中设置了判别程序。程序中的5~7行将随机产生的12位密码与原来已经产生的其他密码进行比较,其中jiold[]变量用于存放当天已经产生的密码,totalcount变量为已经产生密码的个数。

若比?#31995;?#32467;果相同,?#24471;?#26032;产生的密码重复,程序返回,再重新产生一个12位密码。若不同,?#24471;?#23494;码没有重复,将新密码保存在密码变量jICun[]中,同时自动打开一个新箱位,对应箱位的占位指示?#23631;痢?~11行调整密码计数?#21018;?count)和当天已经产生密码计数?#21018;?totalcount)。

当柜体箱位己满,也就是count大于32时,工作状态指示箱位已满,提醒后来的顾客不要继续在该寄存柜操作。

取出物品时,通过操作面板输入12位数?#32622;?#30721;,12位密码数据分别存放在变量display[i](i=1,2,…,12)单元,显示程序将display[]中的数值在数码管上显示出来。控制系统将这次输入的密码与原来保存在变量jicun[]中的12位数?#32622;?#30721;进行比较,若相同,打开原来存放物品对应箱位门锁,并熄灭相应箱位的占位指示灯;否则,不执行任何操作。取出物品程序如下:

void Take(){

1.qq:Mimac=ReadKey();

2.if(Mimac!=0x11){

3.if(Mimacount

4.Mimac--;Mimac=c&0x00f;

5.display[Mimacount]=Mimac;

6.Mimatemp*=10;

7.Mimatemp+=Mimac;

8.Mimacount++;goto qq;}

9.goto endt;}

10.for(j=0;j

11.if(jicun[j]=Mimatemp){

12.orinum=j;}}

13.endt:return();}

上述程序中的第1行ReadKey()是键盘按键读取子程序,2~9行等待读取操作面板输入12位数?#32622;?#30721;,并将输入的密码以十进制的形式暂时保存在变量Mimatemp中,程序中的第2行用于判断是否退出键。10~12行判别输入的12位密码是否与原来某一内存变量jicun[]的密码相同,若相同,打开原来存放物品的箱位门锁;否则,不执行任何操作。第3行Mimacount用于计算密码输入个数的位置,第4行Mimac用于保存密码的一位数字,第12行orinum用于保存对应密码的箱位号。numset是初始设定的密码位数,这里,numset=12。

为防止恶意操作,密码不相符时,可重复输入三次,然后设置禁止操作标志位,自动闭锁延时一段时间(例如3分钟),再?#24066;?#25805;作;在时钟定时中断程序中对设置的禁止操作标志复位,恢复正常操作。

前面已经介绍,jicunnum[]变量用于保存箱位的箱位号,初始状态为jicunnum[i]=i(i=1,2,…,32)。但是,经过一段时间操作运行以后,jicunnum[]的原始状态已经发生了变化。假如,现在第7位顾客取走了物品,jicunnum[7]的内存已经不是7,为实现箱位状态指示和接受继电器控制输出,必须保证操作的密码和其箱位号一致,?#30475;?#21462;出物品后,要对箱位号变量进行重新排序。下面是箱位的排序程序。

void sort(){

1.count--;

2.tempnum=jicunnum[orinum];

3.for(i=orinum;i

4.jicun[i]=jicun[i+1];

5.jicunnum[i]=jicunnum[i+1}

6.jicunnum[count]=tempnum;

7.return();}

程序中的第1行为计数器减1操作,?#24471;?#29289;品已经被取走,空出一个箱位,第2行保存密码所对应的箱位号,3~5行将当时空的那个箱位后面的箱位号(jicunnum[])及对应密码(jicun[]),挨个往前?#26469;我?#21160;,直到已经存放的箱位i=count逐个移动完毕。

程序中的第6行把已经取出物品的箱位号排到最后内存变量jicunnum[count]。

经过箱位排序程序重新排序后,此时第7位顾客的箱位号jicunnum[7]保存的是当时空的那个箱位后面的箱位号。程序中的变量count、orinum、jicun[]定义与前面相同。

存、取物品过程中,为了让使用者了解系统的工作状态,例如:存放或取出物品,柜体箱位已满或已空,哪些箱位已空等状态,通过工作状态指示灯提醒顾客。

为了便于操作管理,程序中设置了监控管理程序,遇有特殊情况,需要随时打开?#25105;?#31665;位时,系统操作人员有权完成该操作。设置不同的管理权限密码,只有系统管理人?#20445;?#25165;能进入该操作;其操作过程与取出物品时相同。

换一批

延伸阅读

[单片机应用] pic单片机高手过招,pic单片机复位系统模块+pic单片机中断模块介绍

pic单片机高手过招,pic单片机复位系统模块+pic单片机中断模块介绍

pic单片机在生活中存在诸多应用,这是大多朋友学习pic单片机的主要原因之一。对于pic单片机,小编曾带来大量介绍。而本文中,将为大家介绍pic单片两大方面内容:pic单片机复位系统模块+pic单片机中断模块。如果你对这部分内容存在疑惑,不......

关键字:pic单片机 复位系统模块 中断模块

[单片机应用] pic单片机学习笔记,搞懂pic单片机二三事

pic单片机学习笔记,搞懂pic单片机二三事

pic单片机的学?#23433;?#38750;一蹴而?#20572;?#27599;位学习pic单片机的朋友可能?#21152;?#23646;于自身的知识?#35745;住?#31508;记等。为促进大家在pic单片机学习道路上更进一步,小编特此献上一篇pic单片机学习笔记。青春不老,pic单片机学无止?#22330;?.....

关键字:pic单片机 寻址 学习笔记

[单片机应用] 大佬谈pic单片机,再话pic单片机选型问题

大佬谈pic单片机,再话pic单片机选型问题

pic单片机是常用器件之一,每位学习pic单片机的朋?#35328;?#23398;习过程中总会遇见各种难题,如pic单片机选型问题。对于pic单片机选型,小编曾带来过简单介绍。而在本文中,将对pic单片机选型进行详?#35206;?#36848;,以帮助大家扫清选型难点。......

关键字:pic单片机 单片机 选型

[MCU] 老兵传奇-8bit MCU和EFM8BB1LCK开发板评测

老兵传奇-8bit MCU和EFM8BB1LCK开发板评测

老兵传奇-8bit MCU和EFM8BB1LCK开发板评测板子图 板子前视?#23492;?#21040;这个板子, 可以?#24471;?#26377;?#35009;?#24778;奇.这个板子从外观还是功能讲, 在?#25910;?#26368;近用过的板子中可以说非常普通. 不过评价一个板子并不能仅仅从外貌出发吧, 借着这......

关键字:8位单片机 EFM8BB1LCK Silicon Labs 51单片机

[单片机应用] 搞定单片机编程软件,窥探IAR单片机编程软件

搞定单片机编程软件,窥探IAR单片机编程软件

单片机编程软件在实际工程中具备诸多应用,每一款单片机编程软件乃至不同版本的单片机编程软件皆兼具自身特色。本文将涉及两方面内容,一是IAR单片机编程软件的简单介绍,二是阐述IAR单片机编程软件从建立工程到烧录程序的过程。如果你对这两方面内容存......

关键字:单片机编程软件 IAR 烧录程序

[单片机应用] 吃透单片机编程软件,IAR单片机编程软件创建stm32工程

吃透单片机编程软件,IAR单片机编程软件创建stm32工程

Keil和IAR单片机编程软件,是当前流通度庞大的两款单片机编程软件。而对于单片机编程软件的使用,各自存在一定区别。本文中,将为大?#21307;步釯AR单片机编程软件建立stm32工程的详细方法,希望大家通过本文能够有所收获哦。......

关键字:单片机编程软件 IAR stm32

[单片机应用] 单片机编程软件一点通,IAR单片机编程软件工程调试方法

单片机编程软件一点通,IAR单片机编程软件工程调试方法

单片机编程软件通常以Keil和IAR为主,大家在选择适合自己的单片机编程软件时可依据工程要求而定。本文内容针对IAR单片机编程软件,主要?#27493;?#35813;单片机编程软件的工程调试使用方法。如果你对本文将要?#27493;?#30340;内容存在疑惑,不妨一起来学习下哦。......

关键字:单片机编程软件 IAR 工程调试

[单片机应用] pic单片机也可以很简单,搞定pic单片机IO口操作

pic单片机也可以很简单,搞定pic单片机IO口操作

对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间?#33455;縫ic单片机的各类?#38469;酢?#32780;谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希望大家认真研读,......

关键字:pic单片机 51单片机 AVR单片机

[单片机应用] 大佬探讨pic单片机,pic单片机更实用

大佬探讨pic单片机,pic单片机更实用

pic单片机是当前最实用工具之一,而对于pic单片机的探讨往往与其他类型单片机相联系。本文中,将讨论pic单片机和51单片机谁更?#23376;?#23398;习,以?#31246;?#21161;大?#20197;?#36827;对pic单片机的理解。......

关键字:pic单片机 51单片机 单片机

[单片机应用] 大佬?#27493;?#21333;片机编程软件,IAR单片机编程软件之基础教程

大佬?#27493;?#21333;片机编程软件,IAR单片机编程软件之基础教程

好的单片机编程软件受到众多开发人员青睐,而对单片机编程软件了解较多的朋友都知道,目前市场上主要流通的单片机编程软件为Keil和IAR。本文中,主要为大?#21307;步釯AR单片机编程软件的基础教程。如果你对IAR存在一定兴趣,不妨继续往下?#30784;?.....

关键字:单片机编程软件 IAR 基础教程

[单片机应用] 基于单片机的气体流量计检测仪

基于单片机的气体流量计检测仪

气体流量计是较为常用的仪表设备。钟罩式气体流量标准装置是以空气作为介质,对气体流量计进行检定、校?#24049;图?#27979;的计量标准装置。主要适用于速度式、容积式和差压式等气体流量计的检定、校准和型式评价工作,也可用于气体流量测量的?#33455;?#24037;作。本?#24149;?#20110;C805......

关键字:单片机 气体流量计 检测仪

[单片机应用] 基于51单片机的电力载波通信开关电路的制作

基于51单片机的电力载波通信开关电路的制作

基于51单片机的电力载波通信开关电路的制作......

关键字:51单片机 电力载波 通信开关电路

我 要 评 论

网友评论

?#38469;?#23376;站

更多

项目外包

更多

推荐博客

新时时彩