C语言中如何用指针变量的方法来实现1输入的十个数的逆序输出啊、哪位大虾解答下感激不尽!!!

C语言中如何用指针变量的方法来实现1输入的十个数的逆序输出啊、哪位大虾解答下感激不尽!!!,第1张

用C语言指针实现字符串逆序及回文串的判定

口裴晓英

(新疆兵团高等专科学校新疆·鸟鲁木齐831300)

摘要:字符串逆序输出是C语言经典算法之一,过去利用数组下标处理此类问题,较为繁琐,本文给出

了利用指针实现任意给定字符串的逆序输出方法,以及在此基础上进行回文字符串判断的便捷方法。

关键词:C语言指针字符串逆序算法回文

中图分类号:TP39 文献标识码:A 文章编号:1007-3973(2008 1 12-071.Ol

‘C语言中,实现任意给定字符串的逆序输出,是一道经

典常用算法,掌握此类算法,对于提高运用字符串能力及编

程综合能力都有很大的帮助。对于C语言字符串的处理,人

们惯常使用的是数组下标的方法,不仅效率低,而且估算下

标容易出错,准确率低,最为致命的还是下标一旦越界,会

出现乱码甚至程序崩溃。笔者经过试验、总结,提炼出用指

针实现字符串逆序输出的简便方法,并且在此基础上,应用

此类方法,我们可以方便快捷的解决同类的字符串处理问

题,例如回文的判断,本文也给出了相应实现办法.

1问题

(1)对于任意给定的字符串,进行倒置,打印输出该串

为原串的逆序。例如输入为“tomo玎ow”。则其存储和输出

即为“worromot”。

(2)判断任意给定字符串是否回文,输出相应提示信

息。

所谓“回文串”,即一个字符串正序读和逆序读时都

一样,如“level”或者“noon”等等就是回文串。

2算法思路

问题1)将一个给定字符串逆序存储

定义一个足够大的字符数组,用于存储用户输入的任

意字符串。再定义两个字符指针,分别指向字符串的头部和

尾部,交换两指针指向的字符,交换后两指针分别后移和前

移,循环交换对应位置的字符,直到两指针在中点相遇,则

整个串实现了与原串的逆序存储。

问题2)回文的判定:类似问题1)的处理方法,我们首

先定义一个足够大的字符数组,用于存储用户输入的任意

字符串。再定义两个字符指针,分别指向字符串的头部和尾

部,两指针分别后移和前移,依次判断对应位置的字符是否

相同,一旦不相同即退出循环,说明不是回文串,若一直相

同,直到两指针在中点相遇,则整个串是回文串,输出相应

信息。

问题I)和问题2)的核心算法,都是对对应位置的字

符进行比较判断,故我们都采用指针的方法可以很方便的

解决这两类问题。

3算法实现

对比:用数组下标的方式判定回文的算法实现(结合指

针的运用):

#include“stdio.h”

#include“string.h”

int mmnO

{ ,

char sn-[50J,’p;

im i;

printf(“请输入字符串妇”);

scanq”%s”,s∞;

P-s也

t/把指针移动到字符串的末尾

矿矿strlen(str)-I;

for(i=O;i<(int)strlen(str);i++,p..)

{

if(+p!fstr[i])

{

printff”这个字符串不是回文、Il”);

return l;

}

'

printff”这个字符串是回文、ll”);

return O:

}

对比:用堆栈的方式判定回文的算法实现:

#include<stdio.h>

#define S1'ACK INIT SIZE loo

#dcfine STACK INCltEⅣENT lO

typcdef struct

{

char+base;

char‘top;

int stacksizc;

}SqStack;

int InitStack(SqStack‘S)

{

S->base=(char+)malIoc(STACK—INIT—SIZE+

sizeof(char)):

if(!S->base)

rg:t1.1nl 0:

S->top=S->basc;

S->s。tacksizc;STACK_INIT-sIZE;

rgturn l:

)

int净0:

intj=O;

char str[20],str2120];

斟m论丘·2008年第12期I下)

万方数据

戆黍熬j纛窦鬻鬃

基于SolidWorks拉深模三维CAD系统的研究

口张俊

(宿迁学院机电工程系江苏·宿迁223800)

摘要:本文简要介绍了开发拉深模具三维CAD系统的整体过程,并以凹模为例,详细阐述了模具各零部

件的三维设计步骤,并给出了凹模设计的方法和开发程序。

关键词:拉深模SolidWorks vB

中图分类号:TP39 文献标识码:A 文章编号:1007.3973 I 2008)12-072·02

筒形件拉深模具在汽车、拖拉机、飞机、钟表、电器和仪

表中得到了广泛应用,市场前景良好。目前,三维筒形件拉

深模CAD系统的研究和开发较为滞后,三维系统的开发迫

在眉睫,本研究对于促进模具三维软件的开发、提高模具设

计质量和生产效率、推进模具行业的快速成型技术和促进

制造业的全面发展,均具有重要的研究价值。

本系统采用Windows XP为 *** 作系统、Visual Basic 6.0

为编程工具、SolidWorks 2006为图形处理软件、Microsoft

Access 2003为数据库管理系统。

1系统的需求分析

拉深模CAD系统的任务就是要使设计人员可以快速、

轻松查阅数据和表格,降低对设计人员经验的依赖性,辅助

设计人员进行决策,减轻设计人员绘图劳动,使拉深模设计

更轻松,实现三维造型设计,提高模具质量和设计效率。

筒形件拉深模CAD系统是一个比较复杂的系统,采用

结构化分析方法可简化系统的难度,准确表达用户需求,确

保软件开发成功。系统的详细数据流图如图l所示.

:£媚‘嫱牲0 ,瓤§

图1拉深模CAD系统详细数据流图

2系统结构的设计

本系统由六大模块构成:主控程序、产品信息输入模

块、工艺计算分析模块、模具设计与计算模块、模具三维图

生成模块及专用数据库和图形库。

(1)主控程序

主控程序即程序管理程序,对各模块进行综合管理,用

户通过此界面进入模具的其它各个模块,并对其进行 *** 作。

(2)零件信息输入模块

零件信息输入模块将拉深件的几何尺寸和精度、材料

和工艺条件等信息输入到计算机内,并存入数据库中,为后

续设计提供拉深件的产品信息。

(3)工艺分析与计算模块

工艺分析与计算模块主要对零件的各个参数进行工艺

分析,判断参数是否符合工艺条件,并确定工艺参数。计算

出毛坯尺寸,判断是否能一次拉深成形,计算拉深次数、拉

深系数、各工序的半成品尺寸、压边力、拉深力、拉深功,并

将上述信息存入数据库中,为模具设计打下良好基础。

(4)模具设计与计算模块

模具计算过程包括计算凸、凹模尺寸、圆角半径,计算

零部件尺寸等。设计过程包括确定模具结构类型的选择、工

作部件的设计、辅助零件的设计及模架、标准件的选择。

(5)模具三维图生成模块

在三维绘图环境下,利用CAD软件生成模具零部件的

三维实体模型,最后在此基础上装配成该模具的装配体,为

用户的下一步工作(如生成二维工程图、CAD/CAM的集成

等)做准备。以凹模为例,介绍其开发过程。

SqStack s;

InitStack(&s);

prinff(”请输入一个任意字符串:ha”);

scanf(”‰”.stO;

forCi<strlcn(str);i++)

Push(&s,s仃i1);

forCj<stricn(str);j++)

Pop(&s,&str20);

if(strcmp(str,str2)一O)

pri.tf”是回文串ha”);

clsc

prin氓”不是回文串、II”);

}

4结束语

将给定字符串逆序存储以及判断一个给定字符串是否

是回文,这两类问题,核心算法都是相同的,我们通过熟练

运用指针,可以方便灵活的予以解决,对比给出的数组及堆

栈的处理方法,指针解决方法简洁明了,易懂易用,易于移

植和扩展到相关字符串问题中,便于触类旁通、举一反三。

参考文献:

[1]谭浩强.C程序设计(第二版)[H].清华大学出版

社,2005.

[2]顾晓燕.C语言中指针和指针教学[J].福建电脑.2008年

(01).

[3]吴琼.陈新文.关于指针数组与指向指针的指针教学研

究[J].电脑开发于应用,2007年(总702).

斟协论lij·2008年第12期(下l

万方数据

用C语言指针实现字符串逆序及回文串的判定

作者: 裴晓英

作者单位: 新疆兵团高等专科学校,新疆·乌鲁木齐,831300

刊名:

科协论坛(下半月)

英文刊名: SCIENCE & TECHNOLOGY ASSOCIATION FORUM

年,卷(期): 2008,""(12)

被引用次数: 0次

参考文献(3条)

1谭浩强C程序设计 2005

2顾晓燕C语言中指针和指针教学[期刊论文]-福建电脑 2008(01)

3吴琼陈新文关于指针数组与指向指针的指针教学研究[期刊论文]-电脑开发与应用 2007(总702)

相似文献(10条)

1期刊论文吴琼WU Qiong C语言指针教学方法研究 -鄂州大学学报2009,16(2)

指针是C语言的精华和重要特色,理解指针的概念应从计算机存储系统硬件结构入手,它是C语言学习的重点和难点,数组也是C语言学习的重点和难点

,针对指针数组与指向指针的指针这一教学难点该文用图示方法将复杂的概念形象地表示出来,用对比方法阐释比较容易混淆的概念,通过简单实用的程

序对比分析二者的应用,揭示它们的区别与编程意义

2期刊论文王恒滨闫东升关于C语言指针定义的讨论 -辽宁财专学报2004,6(2)

在教学和实践中发现,C语言指针定义的信息量不足,难于解释指针使用的许多方面本文大胆地剖析了已有的定义,从中找出问题所在,并试图加以改

进还结合实例给出了"拟构"概念,较好地说明了相关知识尤其是指针与数组的关系

3期刊论文李忠武Li Zhong-wu C语言指针探讨 -保山师专学报2005,24(2)

结合实例从五个方面对C语言指针进行分析和探讨:阐述C语言指针的概念和正确使用指针变量,区分指针变量和指针的指向变量的含义和用法;通过判

断变量与运算符、[]和()的结合顺序来确定变量的数据类型及指向变量或成员变量的类型;指出指针与数组的关系,通过指针来访问数组元素和采用下标

法数组元素的等价关系;作为函数参数的指针变量,可以改变所指向的主调函数变量的值;指针可以实现动态存储分配,用来实现对链表的创建、插入和删

除等 *** 作

4期刊论文娄浩韬 C语言指针研究 -硅谷2008,""(2)

指针是C语言的精华,抛开指针的C语言是没有生命力的我们认为深入理解指针的本质含义,对指针进行理性分析和研究将有助于我们进一步加深对

C语言程序编程的认识和应用

5期刊论文陈建辉 C语言指针探讨 -莆田高等专科学校学报2001,8(4)

结合实例从五个方面对C语言指针进行分析和探讨:阐述C语言指针的概念和正确使用指针变量,区分指针变量和指针的指向变量的含义和用法;通过判

断变量与运算符,[]和()的结合顺序来确定变量的数据类型及指向变量或成员变量的类型;指出指针与数组的关系,通过指针来访问教组元素和采用下标

法数组元素的等价关系;作为函数参数的指针变量,可以改变所指向的主调函数变量的值;指针可以实现动态存储分配,用来实现对链表的创建、插入和删

除等 *** 作

6期刊论文深入理解C语言指针 -内江科技2005,""(6)

指针是C语言的精华和核心部分,充分体现了C语言的灵活性,增强了C语言的功能本文从指针的定义、指针的功能及由于指针的使用带来的安全性等

方面深入地分析了C语言的指针

7期刊论文邓满英DENG Man-Ying 浅析C语言指针 -襄樊职业技术学院学报2010,9(1)

C语言功能丰富、使用灵活方便,主要体现在其指针灵活且无所不指上指针是C语言的灵魂、精华与根本所在,其内容也是C语言的重点及难点能否正

确理解和使用指针是衡量学生掌握C语言的一个重要标志,也直接影响学生对<数据结构>和< *** 作系统>等后续课程的学习和把握本文从指针的概念、指针

的运算等来浅析C语言指针

8期刊论文吴斌WU Bin C语言指针的教学 -安徽职业技术学院学报2004,3(3)

指针是C语言的低级语言特性使用指针程序员可以按地址 *** 作计算机内存,灵活实现一些特定功能;使用指针可以方便地表达复杂的数据结构,使程序

简洁、高效、紧凑,指针是整个C语言课程的重点以及后续课程的重要基础指针是C语言教学难点,在教学中采取适当的策略和方法完全可以取得较为满意

的效果

9期刊论文彭程杨春生C语言指针 *** 作技巧探讨 -中国高新技术企业2008,""(10)

指针增加了我们控制程序的灵活性,但是指针使用不当就会出现野指针,危害整个程序的运行,所以在程序中使用指针时应十分小心,养成良好的编码

习惯,避免出现野指针

10期刊论文刘丽梅 复习C语言应注意的几个方面(之四)--针对CCT C语言指针部分 -承德职业学院学报

2005,10(3)

本文主要针对CCT中的C语言部分,在复习时应该注意的几个方面,以讲、例结合的方式作了详细的论述

绪 论

电源技术尤其是数控电源技术是一门实践性很强的工程技术,服务于各行各业。电力电子技术是电能的最佳应用技术之一。当今电源技术融合了电气、电子、系统集成、控制理论、材料等诸多学科领域。随着计算机和通讯技术发展而来的现代信息技术革命,给电力电子技术提供了广阔的发展前景,同时也给电源提出了更高的要求。随着数控电源在电子装置中的普遍使用,普通电源在工作时产生的误差,会影响整个系统的精确度。电源在使用时会造成很多不良后果,世界各国纷纷对电源产品提出了不同要求并制定了一系列的产品精度标准。只有满足产品标准,才能够进入市场。随着经济全球化的发展,满足国际标准的产品才能获得进出的通行证。数控电源是从80年代才真正的发展起来的,期间系统的电力电子理论开始建立。这些理论为其后来的发展提供了一个良好的基础。在以后的一段时间里,数控电源技术有了长足的发展。但其产品存在数控程度达不到要求、分辨率不高、功率密度比较低、可靠性较差的缺点。因此数控电源主要的发展方向,是针对上述缺点不断加以改善。单片机技术及电压转换模块的出现为精确数控电源的发展提供了有利的条件。新的变换技术和控制理论的不断发展,各种类型专用集成电路、数字信号处理器件的研制应用,到90年代,己出现了数控精度达到005V的数控电源,功率密度达到每立方英寸50W的数控电源。从组成上,数控电源可分成器件、主电路与控制等三部分。目前在电力电子器件方面,几乎都为旋纽开关调节电压,调节精度不高,而且经常跳变,使用麻烦

数字化智能电源模块是针对传统智能电源模块的不足提出的,数字化能够减少生产过程中的不确定因素和人为参与的环节数,有效地解决电源模块中诸如可靠性、智能化和产品一致性等工程问题,极大地提高生产效率和产品的可维护性。

电源采用数字控制,具有以下明显优点:

1)易于采用先进的控制方法和智能控制策略,使电源模块的智能化程度更高,性能更完美。

2)控制灵活,系统升级方便,甚至可以在线修改控制算法,而不必改动硬件线路。

3)控制系统的可靠性提高,易于标准化,可以针对不同的系统(或不同型号的产品),采用统一的控制板,而只是对控制软件做一些调整即可。

4)系统维护方便,一旦出现故障,可以很方便地通过RS232接口或RS485接口或USB接口进行调试,故障查询,历史记录查询,故障诊断,软件修复,甚至控制参数的在线修改、调试;也可以通过MODEM远程 *** 作。

5)系统的一致性好,成本低,生产制造方便。由于控制软件不像模拟器件那样存在差异,所以,其一致性很好。由于采用软件控制,控制板的体积将大大减小,生产成本下降。

6)易组成高可靠性的多模块逆变电源并联运行系统。为了得到高性能的并联运行逆变电源系统,每个并联运行的逆变电源单元模块都采用全数字化控制,易于在模块之间更好地进行均流控制和通讯或者在模块中实现复杂的均流控制算法(不需要通讯),从而实现高可靠性、高冗余度的逆变电源并联运行系统。

第一章 系统设计

11设计任务与要求

111设计任务

设计一台微机控制的数控直流电压源,为电子设备供电。

在设计过程中,选择1~2个单元电路使用仿真软件(例如Multisim2001等)进行仿真调试。

用计算机绘制所有的电路图和印刷电路图

112设计要求

输出电压范围0-30v,步进值为01V

电压调整率Sv<005%V;

电流调整率Si<003%A;

纹波电压〈峰峰值<=5mA;

具有过流保护和短路保护功能;用数字显示输出电压

12方案的选择与论证

121 总体设计方案

根据题目要求设计的框图,如图11所示:

方案一:此方案采用传统的调整管方案,主要特点在于使用一套十进制计数器完成系统的控制功能,一方面完成电压的译码显示,另一方面其输出作为EPROM 的地址输入,而由EPROM的输出经D/A变换后去控制误差放大的基准电压,以控制输出步进。其框图如图12所示

图21原理框图

如图12 调整管控制的稳压电源

方案二:采用51系列单片机作为整机的控制单元,通过改变输入数字量来改变输出电压值,从而使输出功率管的基极电压发生变化,间接地改变输出电压的大小。为了能够使系统具备检测实际输出电压值的大小,可以经过ADC0809进行模数转换,间接用单片机实时对电压进行采样,然后进行数据处理及显示。采用软件方法来解决数据的预置以及电流的步进控制,使系统硬件更加简洁,各类功能易于实现本系统以直流电源为核心,利用51系列单片机为主控制器,通过键盘来设置直流电源的输出电流,设置步进等级可达01V,并可由数码管显示实际输出电压值和电压设定值。利用单片机程控输出数字信号,经过D/A转换器(DA0832)输出模拟量,再经过运算放大器隔离放大,控制输出功率管的基极,随着功率管基极电电流的变化而输出不同的电压。单片机系统还兼顾对恒压源进行实时监控,输出电压经过电流/电压转变后,通过A/D转换芯片,实时把模拟量转化为数据量,经单片机分析处理, 通过数据形式的反馈环节,使电压更加稳定,构成稳定的压控电压源。

图13 单片机控制的稳压电源

122方案的比较与论证

1221数控部分

方案一采用中、小规模器件实现系统的数控部分,使用的芯片很多,造成控制电路内部接口信号繁琐,中间相互关联多,抗干扰能力差。在方案二中采用单片机完成整个数控部分的功能,同时,8031作为一个智能化的可编程器件,便于系统功能的扩展。

1221输出部分

方案一采用线性调压电源,以改变其基准电压的方式使输出不仅增加/减少,这样不能不考虑整流滤波后的纹波对输出的影响,而方案二中使用运算放大器作前级的运算放大器,由于运算放大器具有很大的电源电压抑制比,可以大大减小输出端的纹波电压。在方案一中。为抑制纹波而在线性调压电源输出端并联的大电容降低了系统的响应速度,这样输出的电压难以跟踪快变的输入,方案二中的输出电压波形与D/A变换输出波形相同,不尽可以输出直流电平,而且只要预先生成波形的量化数据,就可以产生多种波形输出,使系统陈给有一定驱动能力的信号源。

1223显示部分

方案一中的显示输出是对电压的量化值直接进行译码显示输出,显示值为D/A转换的输入量,由于D/A转换与功率驱动电路引入的误差,显示值与电源实际输出值之间可能出现较大偏差。方案二中采用三位半的数字电压表直接对输出电压采样并显示输出实际电压值,一旦系统工作异常,出现预制值与输出值偏差过大,用户可以根据该信息予以处理。方案二中还采用了键盘/显示器接口控制器8279。不仅简化接口引线,而且减小了软件对键盘/显示器的查询时间,提高了CPU的利用率。

综上所述,选择方案二,使用单片机实现。

123系统的原理框图和电路图

图14 总体原理框图

第二章 系统的硬件电路设计

21电源部分

211稳压电路结构组成

稳压电源由电源变压器、整流电路、滤波电路和稳压电路组成,如图21所示

21 电源方框及波形图

a整流和滤波电路:整流作用是将交流电压U2变换成脉动电压U3。滤波电路一般由电容组成,其作用是脉动电压U3中的大部分纹波加以滤除,以得到较平滑的直流电压U4。

b稳压电路:由于得到的输出电压U4受负载、输入电 压 和 温度的影响不稳定,为了得到更为稳定电压添加了稳压电路,从而得到稳定的电压U0。

212电源设计

电源部分包括:+5V、 15V两大部分:

+5V电源只要供单片机部分使用,原理图如图22所示

对于滤波电容的选择,需要注意整流管的压降;7805的最小允许压降波动10%,所以允许的最大纹波的峰峰值 U=9 (1-10%)-14-5=276V

C= = =3600Uf

选取的滤波电容所以选取的滤波电容C=4700Uf/16V

15V电源,其电源电路如图23所示

允许的纹波峰峰值 U=18 (1-10%)-07-12-U=49V

按近似电流放电计算,则

C= = =1430Uf

选取滤波电容选取滤波电容C=2200uF/30V

图22和图23

22数控部分

221AT89C51单片机

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(EPROM)和128 bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可提供高性价比的应用场合,可灵活应用于各种控制领域。因此,在这里我选用AT89C51单片机来完成。

主要性能参数:

•与MCS-51产品指令系统完全兼容

•4K字节可重擦写Flash闪存存储器

•1000次擦写周期

•全静态 *** 作:0hz-24hz

•三级加密程序存储器

•128x8字节内部RAM

•32个可编程I/O口线

•2个16位定时/计数器

•6个中断源

•可编程串行UART通道

•低功耗空闲和掉电模式

AT89C51 内存空间

1、内部程序存储器(FLASH)4K 字节。

2、外部程序存储器(ROM)64K 字节。

3、内部数据存储器(RAM)256 字节。

4、外部数据存储器(RAM)64K 字节。

23信号处理电路

231D/A转换

电源输出电压范围是0-30V,步长01V,共有300个状态,而8位的D/A转换只有256个状态,不能满足要求,因此我需要选用10字长的D/A转换器来达到设计要求。

MAX504是由美信(Maxim)公司生产的一种低功耗、电压输出型10位串行数/模转换器。MAX504既可用+5V单电源工作,也可用±5V双电源工作。该电路采用14引脚DIP型或SO型封装,图2示出它的引脚排列,表1介绍它的引脚功能。

图25 MAX504封装图

表1 MAX504的引脚功能

引脚序号 引脚名称 引脚功能

1 BIPOFF 双极性偏置/增益电阻端

2 DIN 串行数据输入端

3 CLR/ 清除端,异步置位DAC寄存器所有位

4 SCLK 串行时钟输入端

5 CS/ 片选端,低电压有效

6 DOUT 串行数据输出端

7 DGND 数字地

8 AGND 模拟地

9 REFIN 参考电压输入端

10 REFOUT 参考电压输出端,若不用应接至VDD

11 VSS 电源负端

12 VOUT DAC模拟输出地

13 VDD 电压负端

14 RFB 反馈电阻端

24键盘与显示部分

241显示部分

显示数据以串行方式从89C51的P12口输出送往移位寄存器74LS164的A、B端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT3的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED2。位选码由89C51的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,4个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这4个数码管看上去几乎是同时显示。

242键盘部分

键盘是有无数个按键组成的开关矩阵,它是一种廉价的输入设备。一个键盘通常包括数据键,字母键以及一些功能键。 *** 作人员可以通过键盘向计算机输入数据、地址、指令或其他的控制命令,实现简单的人机对话。

用于计算机系统的键盘通常有两种:一类是编码键盘,即键盘上闭合键的识别有专用硬件识别。另一类是非编码键盘,即键盘上键入及闭合键的识别由软件实现。

键盘接口应具有的功能:

键扫描功能,即检测是否有键按下

键识别功能,确定被按下建所在的行列的位置

产生相应的键的代码

消除按键d跳及对付多键串键

这里我要选用的是非编码3x3键盘结构,能自动消除键抖动影响,具有对按键同时按下的保护,能把键盘信息存入堆栈,也可向CPU发中断请求,得到响应后,使CPU获取按键信息,还可接受CPU队间信息的查询。

对每个键我们都赋予了特定的功能:

0------每按键一次增加10V

1------每按键一次减少10V

2------每按键一次增加1V 0 1 2

3------每按键一次减少1V 3 4 5

4------每按键一次增加01V 6 7 8

5------每按键一次减少01V

7-----清除显示

8-----开始显示

AT89C51和8279键盘、显示器接口

下图211是AT89C51、8279与键盘和显示器的接口电路,当有键按下时,8279可用中断方式通知C51。编程实现的功能是:当有键0-8按下时,完成健值获取,并用LED输出显示键值。

25输出电路

251稳压输出部分

这部分将数控部分送来的电压控制字转换成稳定电压输出,电路主要由D/A转换、稳压输出、过流保护指示和延时启动等几部分组成,电路图如图 所示

电压输出范围为0-299V,步长01V,共有300种状态,所以上面提到选用10位D/A转换器MAX504。设计中用两个电压控制字代表01V,当电压控制自从0,2,4•••到598时,电源输出电压为00,01,02•••到299V。当MAX504基准电压采用+15V时,D/A转换电路满幅,输出为150V(电压控制字为1023时)。由于世纪最大用到电压控制字598 ,因此D/A转换部分最大输出电压

V1=(598/1023)15=877

D/A转换部分输出的电压作为稳压输出电路的参考电压。稳压输出电路的输出与参考电压成比例,范围是0-299V,稳压输出部分采用典型的串联反馈稳压电路,也可以认为是以参考电压作为输入的直流功率放大器。这部分电路主要有运放U3A和三极管T1、T2构成,T2时大功率三极管。D/A转换电路输出的电压V1接到运放U3A的同相端,稳压电源的输出经R5、RW3和R6组成的取样电路分压后送到运放U3A的反相端,经运放比较放大后,驱动由T1和T2组成的复合调整管。当电路平衡时,D/A输出电压V1与取样电压V2相等,R5=500Ω,R6=340Ω,51Ω电位器RW3调在中间位置,设稳压电源输出电压为VOUT,则

V2=[(R6+51/2)/(R5+R6+51)] VOUT

=[(340+255)/(500+340+51)] VOUT

=0294VOUT

因为 V1=V2

VOUT=V1/0294=34V1

所以 VOUT=34V1=34879V=299V

252输出电压显示电路

为了实现输出电压的实时监控,使用ICL7107搭接的数字电压表对其输出电压采样测量,并输出显示,用户可以从显示器上看见两个电压值:其一为单片机设置的电压值,即期望值,其二为输出电压的实测值。正常工作时两者相差很小。一旦出现异常情况,用户可以看到期望值不符,从而采取相应的措施。

输出电压测量/显示电路如图

第三章 系统的软件设计

软件要实现的功能是:键盘对单片机输入数据,单片机对获得的数据进行处理,送到10位数模转换器(MAX504),再送到数字电压表,实现数字量对电压的控制。

图31单片机模块方框图

31主控程序

主控程序首先进行系统初始化,然后读入预置电压值,输出相应的电压控制字,等待键盘输入。根据键盘的不同输入,用散转方式转入相应的应用程序,执行后,若用户又输入“清除显示”,则输出电压控制字0,返回初始状态,等待下一次按键。框图如图32所示。

图32 主程序流程图 图33中断服务程序流程图

32中断程序

过流保护由中断实现,在中断服务程序中进行各项报警和保护 *** 作,中断服务程序框图如图33所示。

键盘中断程序中将一标志置“1”,表示有键键入,并将键盘码读入赋给一个变量。在主程序和哥哥应用程序中读取此标志和变量值,作为进行各项 *** 作的依据,读后将标志清零。

33键盘显示程序

图34键中断流程图 图35 显示流程图

第四章电路扩展

41抑制纹波

本题对纹波要求非常高,对于本系统,造成纹波的主要因素是工频干扰、负载波动和数字调节的过冲噪声。其中第三项是数字控制系统必然存在的,不可避免;因此,主要从抑制工频干扰和提高负载容量上来抑制纹波。

◆在电源端即进行滤波。系统的工频干扰主要由电源变压器引入,因此在电源端进行滤波对抑制工频干扰是十分必要和十分有效的。本系统的两个电源都在输出端进行了三极管有源滤波。

42保护电路

保护电路由T3和R8构成,设Lm为保护动作电流,则当电源输出电流I增加到Im时,R8上的压降ImR8使得T3管导通,分掉了复合管的基极电流,使输出I不再增加。电路中Im定为2A,T3的导通电压为06V,则R8=06V/2A=03Ω。

过流时的中断申请由运放U3B产生。当过流发生时,稳压源输出经取样后得到的电压V2低于D/A转换输出电压 v1,U3A输出正向饱和,使得U3B的反向端电位升高,U3B输出低电平,产生中断申请信号。

43延时启动

53系统误差分析

从电路的原理框图可以看出,系统的主要误差来源于三个方面:

(1)MAX504的量化误差 MAX504为10位D/A转换器,满量程为30V的量化误差为1/2LMBS=(1/2)(1/210)30V=1465Mv。按满度归一化的相对误差为

(1/2)(1/210)=005%

(2)基准电压温漂引入的误差 LM336在0—40OC范围内漂移不大于4Mv,

故相对误差=2mV/5V=004%。

结束语

附录

程序清单

主控是什么意思

主要控制的

主控项目是什么意思

主控项目:是指关键项目,影响工程质量和安全的,硬性的规定,必须达到某一数字。一般项目:是指次关键项目,影响表面质量,观感,等待的项目,也必须达到某一指标。允许偏差项目:是指不太关键,不主要的项目,可以有一定的偏差

什么是主控

主控即cpu,CPU是Central Processing Unit的缩写,即中央处理器。CPU发展至今,其中所集成的电子元件也越来越多,上万个晶体管构成了CPU的内部结构。那么这上百万个晶体管是如何工作的呢?看上去似乎很深奥,但归纳起来,CPU的内部结构可分为控制单元,逻辑单元和存储单元三大部分。CPU的工作原理就象一个工厂对产品的加工过程:进入工厂的原料(指令),经过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出成品(处理后的数据)后,再存储在仓库(存储器)中,最后等著拿到市场上去卖(交由应用程序使用)。

CPU是整个微机系统的核心,它往往是各种档次微机的代名词,CPU的性能大致上反映出微机的性能,因此它的性能指标十分重要。CPU主要的性能指标有:

1主频,倍频,外频:主频是CPU的时钟频率(CPU Clock Speed)即系统总线的工作频率。一般说来,主频越高,CPU的速度越快。由于内部结构不同,并非所有的时钟频率相同的CPU的性能都一样。外频即系统总线的工作频率;倍频则是指CPU外频与主频相差的倍数。三者关系是:主频=外频x倍频。

2内存总线速度(Memory-Bus Speed): 指CPU与二级(L2)高速缓存和内存之间的通信速度。

3扩展总线速度(Expansion-Bus Speed): 指安装在微机系统上的局部总线如VESA或PCI总线接口卡的工作速度。

4工作电压(Supply Voltage): 指CPU正常工作所需的电压。早期CPU的工作电压一般为5V,随着CPU主频的提高,CPU工作电压有逐步下降的趋势,以解决发热过高的问题。

5地址总线宽度:地址总线宽度决定了CPU可以访问的物理地址空间,对于486以上的微机系统,地址线的宽度为32位,最多可以直接访问4096 MB的物理空间。

6数据总线宽度:数据总线宽度决定了CPU与二级高速缓存、内存以及输入/输出设备之间一次数据传输的信息量。

7内置协处理器:含有内置协处理器的CPU,可以加快特定类型的数值计算,某些需要进行复杂计算的软件系统,如高版本的AUTO CAD就需要协处理器支持。

8超标量:是指在一个时钟周期内CPU可以执行一条以上的指令。Pentium级以上CPU均具有超标量结构;而486以下的CPU属于低标量结构,即在这类CPU内执行一条指令至少需要一个或一个以上的时钟周期。

9L1高速缓存即一级高速缓存:内置高速缓存可以提高CPU的运行效率,这也正是486DLC比386DX-40快的原因。内置的L1高速缓存的容量和结构对CPU的性能影响较大,这也正是一些公司力争加大L1级高速缓冲存储器容量的原因。不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。

10采用回写(Write Back)结构的高速缓存:它对读和写 *** 作均有效,速度较快。而采用写通(Write-through)结构的高速缓存,仅对读 *** 作有效。

CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。

从现阶段的主流体系结构讲,指令集可分为复杂指令集和精简指令集两部分,而从具体运用看,如Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instructio>>

主控权是什么意思?是什么东西?

就是有权力可以命名别人做事情,

汽车模块里没有主控存储是什么意思

你这是在哪里看到的这个信息他的意思应该说的就是汽车电脑模块里面没有储存主要的控制信息。汽车有问题,问汽车大师。4S店专业技师,10分钟解决。

Ssd固态硬盘的sf主控到底是什么意思?

SF主控指的是英特尔SSD系列的SandForceSF主控芯片,英特尔的SSD多半连续读写性能较低,4K能力不错,寿命较短,压缩文件问题较多,比较突出的代表就是英特尔的330、520系列的SSD

让我来说,如果上Z68以上级别带只能响应功能的主板就最好用英特尔系列的SSD,否则的话,还是考虑海盗船的和M4吧

M2固态硬盘主控是什么意思 50分

M2就是指这块主板上可以直接插M2 ngff的固态硬盘,这种固态硬盘体积比较小,容量小的只有台式机内存条的一半大,而且读取速度相对SATA 30来说有优势,价格也不算贵,这种接口是intel最新的标准,也是以后固态硬盘发展的方向。

这个主板不错。

质量管理体系主控,执行是什么意思

质量管理体系的术语中只有“受控”没有“主控”。

受控的意思是必须遵守质量管理体系文件的规定。执行就是按质量管理体系文件的规定办事。

电厂主控是干什么的?具体点。主控相当于单位中什么职务?

你理解错了,主控不是职务,是指电厂生产运行的控制中心,也叫集控,现在的大中型火电厂都采用单元制机组,即一台发电机配一个锅炉,一个汽轮机。机、炉、电专业进行统一管理,也就是集中控制,一般一个值设一个值长,值长是生产运行调度的核心指挥。每台机组设一个主值班员、副值班员、巡检员(有的厂没有这个岗位)。机、炉、电都在集控室DCS(集散控制系统)上 *** 作,每套机组分开。该工种就是集控运行。一天24小时都有值班员在监视、控制机器进行生产运行。相关附属专业还有:脱硫、化学、输煤、除灰等。

#include <iostream>

using namespace std;

int isEQ(int A,int n) //判断是否 数目相同

{

for(int i=0;i<n-1;){

if(A[i]!=A[++i]){

return 0;

}

}

return 1;

}

void display(int A ,int n) //显示;如果图形界面 需要重写此函数

{

int SUM=0;

for(int i=0;i<n;i++){

SUM=SUM+A[i];

cout<<"A["<<i<<"]="<<A[i]<<"\t";

}

cout<<endl<<"Total number is "<<SUM<<endl;

}

void operate(int A,int n) // *** 作

{

for(int i=0;i<n;i++){

if(A[i]%2){A[i]++;} //奇数小孩要1补成偶数

}

int T=A[n-1]/2; //最后一位拿出一半 放暂存

for(int i=n-1;i>0;i--){//从最后一位开始 数目变为自己的一半加前一位的一半 直道第二个小孩

A[i]=A[i]/2+A[i-1]/2;

}

A[0]=A[0]/2+T;//第一个小孩数目变为自己的原来的一半+最后一位的原来的一半

}

int main() //主模块;如果图形界面写成函数,由按钮等控件的响应函数调用

{

int A[10]={10,2,8,22,16,4,10,6,14,20};

int N=10;

int ntm=0;

while(!isEQ(A,10)){

ntm++;

operate(A,N);

display (A,N);

if(getchar()=='q')break;

}

cout<<"Operate times is "<<ntm<<endl;

}

图形界面是看你采用什么开发平台

毕业综合训练

(毕业论文/设计形式用)

课题名称 单片机打铃系统设计

学 院 信息工程学院

专 业 电子信息工程设计

班 级 13专电子1班

姓 名 李跃 学号 2013242638

指导老师 何健

江西科技学院

毕业综合训练任务书

学院 信息工程学院 专业 电子信息工程技术 年级 13 班级 电子专1班 姓名 李跃 起止日期 题目 单片机打铃设计

1.毕业综合训练任务及要求(根据题目性质对学生提出具体要求)

设计基于单片机的打铃装置,用DS1302对时、分、秒计时和设置打铃时间,采

用三线串行数据传输接口与STC89C52进行同步通信,用矩阵键盘来设置时间值,

并通过8255芯片读入设置值,最后通过89C52单片机芯片综合控制[1],把当前

时间送到数码管显示,到点把信号送入蜂鸣器,实现打铃,撰写毕业论文。

2.毕业综合训练的原始资料及依据(包括做调研的背景,研究条件、

应用环境等)

3.主要参考资料、文献

[1] 张鑫 单片机原理及应用[M]北京:电子工业出版社,20058

[2] 康光华 电子技术基础 模拟部分[M]北京:高等教育出版社,20061

[3] 康光华 电子技术基础 数字部分[M]北京:高等教育出版社,20061

[4] 祁伟, 杨亭 单片机C51程序设计教程与实验[M]北京:北京航空航天大学出版社,

2006

[5] 楼然苗 李光飞 单片机课程设计指导[M]北京:北京航空航天大学出版社,20074

[6] 单片机学习网

指导教师

年 月 日

摘 要

随着科学技术的飞速发展,单片机应用的范围越来越广,本设计正是基于STC89C52型单片机为核心,加上适当的外围部件,设计而成的简易自动打铃系统。

简易自动打铃系统的设计以STC89C52单片机芯片和8255芯片的拓展I/0引脚为核心部件,用定时器中断系统进行计时、数码管显示当前时间、蜂鸣器实现打铃功能、矩阵键盘调整显示时间、电源电路为整个系统提供5V 工作电压,由以上模块构成了本系统。根据设计要求,该简易自动打铃系统可以进行计时和显示,设置当前时间,实现定点打铃等功能。该设计简单、实用、 *** 作便捷。

关键字:单片机;自动定点打铃;设置时间;中断;矩阵键盘;I/O扩展;

目录

摘 要 I

第一章 方案论证与对比 1

11方案一 采用时钟芯片和键盘实现功能 1

12方案二:采用中断定时实现功能 1

13方案比较 2

第二章 单元电路设计与论证 3

21单片机、I/O拓展 3

22打铃电路设计 4

23数码管电路设计 4

第三章 程序设定 5

31主程序工作流程 5

32定时器中断子程序 5

33时间设定子程序 6

第四章 系统功能实际测试 7

41程序实际编译测试 7

42系统实际测试 7

43 软件调试步骤 7

44子程序调试步骤 7

45调试结果 8

46系统误差及性能分析 8

第五章 设计总结 9

第六章 详细仪器清单 10

参考文献 11

附录1 详细程序 12

第一章 方案论证与对比

11方案一 采用时钟芯片和键盘实现功能

方案一原理框图如图11所示:

图 11 采用时钟芯片定时实现功能

该系统用DS1302对时、分、秒计时和设置打铃时间,采用三线串行数据传输接口与STC89C52进行同步通信,用矩阵键盘来设置时间值,并通过8255芯片读入设置值,最后通过89C52单片机芯片综合控制[1],把当前时间送到数码管显示,到点把信号送入蜂鸣器,实现打铃。

12方案二:采用中断定时实现功能

方案二原理框图如图12

所示:

图 12 采用中断定时实现功能

该系统以STC89C52单片机为核心控制部件。用8255做I/O拓展芯片,数码管接8255的PA 、PB 引脚,用动态扫描的方式显示当前时间。蜂鸣器与单片机的P33口相连,当打铃时间到时,由STC89C52发出打铃指令。以外部INT0和INT1中断按钮实现调时功能。

13方案比较

本设计要求能实现基本计时和打铃功能。计时和打铃时间设计,方案一中用到了DS1302时钟芯片计时和打铃时间设置;方案二中采用定时器中断来计时并结合软件设置打铃时间。上述两种方案中:方案一的外围硬件电路设计复杂,而且时钟芯片没有得到充分利用,而方案二的软件计时具有硬件开销小,成本低,外围电路设计简单等优点。上述两种方案中:方案一的软件设计比方案二的难度系数大,使程序易读性不强。综合对计时的精密程度要求不高的本系统,本设计采用方案一来实现功能。

第二章 单元电路设计与论证

21硬件设计总框图

本设计主要由STC89C52单片机芯片与8255芯片组成的模块为控制核心、蜂鸣器电路模块实现打铃功能、矩阵键盘模块调整当前时间、数码管显示模块显示时间,由以上四大模块构成了本系统,详细电路图见附录一,硬件设计总框图如图21:

图21硬件设计总框图

21单片机、I/O拓展

图 22 主控电路框图

STC89C52RC 是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC89C52可为许多嵌入式控制应用系统提供高性价比的解决方案。STC89C52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM ),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时/计数器,2个全双工串行通信口,看门狗

(WDT )电路,片内时钟振荡器。其主要特性[1]如有:与MCS-51 兼容;8k 可反复擦写(>1000次)Flash ROM;全静态工作:0Hz~24MHz;三级程序存储器锁定;2568位内部RAM ;32可编程I/O线;2个16位可编程定时/计数器;5个中断源;可编程串行通道;低功耗的空闲和掉电模式。I/O拓展采用8255芯片,单片机用89C52,电路框图如图2-2所示。

22打铃电路设计

采用P 型三极管为蜂鸣器提供5V 电源,并把STC89C52的P20口与三极管的基极相连接,当P20口有低电平输入出时,三极管导通[2],蜂鸣器响应,从而实现打铃功能。电路框图如图24所示:

图23打铃电路框图

23数码管电路设计

8255的PA 口控制数码管的位选,低电平有效;PB 口做为段选输出,接1K 欧姆的限流电阻[3]。如图24所示:

图24数码管显示电路框图

第三章 程序设定

31主程序工作流程

主程序首先设置8255模式,并打开中断0,设置中断为边沿触发模式;其次在死循环中执行读秒显示子程序,当定时器满一秒时,在显示缓冲区中时间加一,等待送入数码管显示;再次按键扫描子程序,如果有中断0或中断1按钮被按下时,则转入相应功能的子程序中;最后如果当前显示时间满足预设打铃条件,通过打铃判断子程序跳入对应的打铃方式中执行[4]。详细主程序见附录二,主程序流程图如图31。

图 31 主程序流程图

32定时器中断子程序

此子程序为本设计的核心之一,首先初始化定时器T0,设置T0为工作方式1,其初始值为3CB0H (既每次溢出定时50ms ),并对其循环20次,然后把时间加1s ,并送入显示缓冲区等待显示[5]。显示时,先取出内存地址中的数据,然后查得对应的显示用段码从PB 口输出,PA 口将对应的数码管选中供电,就能显示缓冲区中的数据值。为了显示秒位和上下午标志在数码管显示上特加了“—”、“A ”、“P ”这三个特殊字符子。程序流程图如图32:

图 32定时器中断显示子程序流程图

33时间设定子程序

时间设定模块的设计要点是按键的去抖处理与“一键多态”

[5]

的处理。即

只涉及2个键完成了6位时间参数的设定。“一键多态”即多种功能的实现思想史,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。

图 33 键盘扫描子程序流程图

第四章 系统功能实际测试

41程序实际编译测试

在Keil C51编译环境下编译过程中所产生的误差主要是在重装初值的过程中大约需要8个机器周期,本设计采用在程序开始时对定时器赋初值多加8个机器周期来消除此误差。

最后在Keil C51编译环境下编译通过,0警告,0错误。

42系统实际测试

通过实验测试,数码管显示,按键调时,定时打铃均符合预期,测试成功。

43 软件调试步骤

1、打开软件后, 在Project 菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。

2、为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML 89C52”,确定。

3、上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文件/保存”。

4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在d出的菜单中选择添加文件到源代码组,在d出的添加文件框中,选择需要添加到项目中的文件。

5、开始编译,对项目文件进行编译。若没有错误后进行硬件调试。

44子程序调试步骤

子程序调试应一个模块一个模块地进行,首先单独调试各功能子程序,检查程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来进行总调试。故调试步骤[6]如下:

A 、蜂鸣器的调试

调试方法:先把打铃程序下载到单片机,让蜂鸣器发声,看是否在正确的时间内实现打铃。

B 、数码管程序调试

正确的显示时间是整个程序的关键之一。调试方法:先把程序下载到单片机,让数码管显示,是否正确的显示时间的变化。

C 、键盘调时序

正确的显示所调的时间是整个程序的关键之一。调试方法:先把键盘程序和显示程序下载到单片机,让数码管显示,是否正确的所调时间的变化。

45调试结果

实现计时和显示功能(12小时制),可设置当前时间(包括上下午标志,时、分的数字显示),能在上午7:45和下午10:00定点打铃,且每次打铃均为响铃3s ,停1s ,再响3s 。

46系统误差及性能分析

经测试该简易自动打铃系统在一天内会出现时间误差,该误差主要是由于晶振自身的误差所造成的。另外在中断的过程中,只会在第一次计时时产生时间的偏移,而它所产生累积误差很小,可以忽略。

第五章 设计总结

通过这次课程设计,我们得到了很多收获和体会,懂得了团队合作的重要性和必要性,以及工程设计的大体过程。第一,巩固和加深了对单片机基本知识和理解,提高了综合运用所学知识的能力。第二,增强了根据课程需要选学参考资料,查阅手册,图表和文献资料的自学能力。通过独立思考,深入研究有关问题,学会自己分析解决问题的方法。第三,通过实际方案的分析比较,设计计算,安装调试等环节,初步掌握了简单使用电路的分析方法和工程设计方法。第四,在这次课程设计过程中,光有理论知识是不够的,还必须懂一些实践中的知识。所以在课程设计的实践中,我们应将实验课与课堂教学结合起来,锻炼自己的理论联系实际的能力与实际动手能力。第五,掌握了比较常用的仪器的使用方法,提高了动手能力。第六,培养了严谨的工作作风和科学态度。

总之这次课程设计,培养了我们综合应用单片机原理及应用的理论知识和理论联系实际的能力;在设计的过程中还培养了我们的团队精神,同学共同协作,一齐商量讨论,解决了许多问题。这一切都令我们受益匪浅,在今后的学习工作中我们会一如既往,不断努力。

第六章 详细仪器清单

图61详细仪器清单

参考文献

[1] 张鑫 单片机原理及应用[M]北京:电子工业出版社,20058 [2] 康光华 电子技术基础 模拟部分[M]北京:高等教育出版社,20061 [3] 康光华 电子技术基础 数字部分[M]北京:高等教育出版社,20061

[4] 祁伟, 杨亭 单片机C51程序设计教程与实验[M]北京:北京航空航天大学出版社,2006 [5] 楼然苗 李光飞 单片机课程设计指导[M]北京:北京航空航天大学出版社,20074 [6] 单片机学习网

附录1 详细程序

#include #include

#define uchar unsigned char #define uint unsigned int

sbit RING=P3^3;

#define HOR_UP 0x18 //定义键值意义 #define MIN_UP 0x28 #define HOR_DOWN 0X14 #define MIN_DOWN 0x24 #define AM_PM 0X48 #define NO_KEY_DOWN 0XFF

uchar xdata PA _at_ 0xD9FF, PB _at_ 0XDBFF, PC _at_ 0XDDFF, //定义外部变量,强制分配地址 EX_PORT_CON _at_ 0XDFFF;

uchar code LED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA, //LED段码(0~9外加一个全灭, 一个A ,一个P) 0X20,0X28,0XFF,0X30,0X70};

uint code RING_TIME[]={465,1320}; //开启时间(分)

uchar COUNT=0,KEY=NO_KEY_DOWN,HOR=0,MIN=0,SEC=0; //软计时-光标-键值

void Display(); //显示 void Time_Go(); //时间进位 void Time_Set(); //时间设置 void Ring_Control(); //继电器控制 void Delay(uint A); //简单延时 uchar Key_Scan(); //键盘扫描

void main() {

EX_PORT_CON=0X81; //8255初始化(PA,PB ,PC_H输出,PC_L输入)

PC=0xF0; //键盘初始化 TH0=0X3C; //定时器初始化

TH1=TL1=0; TR1=0;

TMOD=0X21;

EA=ET0=TR0=ET1=1; while(1) { Display(); Time_Go();

KEY=Key_Scan(); Ring_Control(); Time_Set(); } }

void Display() {

PB=0XFF; //消影 PA=0XFe; //发送位码

if(HOR>=12)PB=LED_CODE[12]; //发送段码 else PB=LED_CODE[11]; Delay(200); //延时

PB=0XFF; //消影 PA=0XFd; if(HOR>12) //发送位码 PB=LED_CODE[(HOR-12)/10]; else PB=LED_CODE[HOR/10]; //发送段码 Delay(200); //延时

PB=0XFF; PA=0xfb;

if(HOR>12)PB=LED_CODE[(HOR-2)%10]; else PB=LED_CODE[HOR%10]; Delay(200);

PB=0XFF; //中间横杆 PA=0XF7;

if(COUNT>10)//在显示实时时钟时闪烁,为01秒/周期 PB=0XFF; else

Delay(200);

PB=0XFF; PA=0Xef;

PB=LED_CODE[MIN/10]; Delay(200);

PB=0XFF; PA=0XdF;

PB=LED_CODE[MIN%10]; Delay(130); }

void Timer() interrupt 1 {

TH0=0X3C; //重装初值 TL0=0XB2;

COUNT++; //软计时 }

void Ring() interrupt 3 {

RING=~RING; }

void Time_Go() //时间进位 {

if(COUNT>=20) //计数到达20次,即:定时器50MS20=1S { COUNT=0; //软计时清零 SEC+=1; // 秒加1 if(SEC>=60) //秒是否到达60 { SEC=0; //清秒位 MIN+=1; //分钟加1 if(MIN>=60)//分钟是否到达60 { MIN=0; //清分位 HOR+=1; //小时加1 if(HOR>=24)//小时是否到达24 HOR=0; //清小时位 } } }

}

void Time_Set() {

if(KEY==HOR_UP){if(HOR>=23)HOR=0;else HOR++;}

else if(KEY==HOR_DOWN){if(HOR==0)HOR=23;else HOR--;} else if(KEY==MIN_UP){if(MIN>=59)MIN=0;else MIN++;} else if(KEY==MIN_DOWN){if(MIN==0)MIN=59;else MIN--;} else if(KEY==AM_PM){if(HOR>=12)HOR-=12;else HOR+=12;} }

void Ring_Control() //继电器控制 {

uint RTC_MIN;

RTC_MIN=HOR60+MIN; //将实时时钟 化成 分钟 if((RTC_MIN==RING_TIME[0])||(RTC_MIN==RING_TIME[1])) { if(((SEC>=3)&&(SEC=7)){TR1=0;RING=1;} else TR1=1; } }

void Delay(uint A) {

while(A--); }

uchar Key_Scan() {

uchar A=4,ROW=0x08,T=NO_KEY_DOWN; if(PC!=0XF0) //是否有键按下 {Delay(200); //消抖 if(PC!=0XF0) while(A--) //查询,逐列 { ROW

if(T!=0X00) //但前列是否有键被按下

{

T=(T+(ROW&0XF0)); //计算键值

do {Display();Time_Go();} //防止数码管在按键按下时闪烁

while((PC&0X0F)!=0); //松手检测 peak; //跳出循环

}

} PC=0xf0; //键盘初始化

}

return T;

} //返回键值

16

pc主控会影响两台plc之间的信号

西门子公司的SIMATIC S7-200系列PLC是广泛适用于中小型设备控制的工业可编程控制器,以其可靠性高、丰富的指令和内置功能、通信能力强、性价比较高等特点,在工业控制领域中得到越来越广泛的应用。在本文的控制系统中,PLC作为下位机完成现场各种信号和数据的采集、运算和控制。工控PC机作为上位机可提供人机交互界面,实现数据的处理以及现场数据的实时显示等监视和远程控制等功能。S7-200系列的PLC可以在四种通信模式下工作:PPI模式、MPI模式、PROFIBUS-DP模式和自由口通信模式。其中,PPI和MPI是西门子专门开发的通信协议。PPI协议用于点对点接口,是一个主/从协议。MPI协议适用于多点接口,可以是主/主协议或主/从协议。PROFIBUS-DP是西门子支持的现场总线网络。而大多数用户则是选用对用户完全开放的自由口通信模式。在自由口通信模式下,通信协议是由用户定义的。用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接收指令(RCV)来控制通信 *** 作。本设计采用自由口方式,重点介绍工控PC机与主控PLC的通信原理与实现。

1、 硬件组成

ITER导体穿缆测力测长控制系统的框图如图1所示。将测力传感器和测长编码器通过信号线与PLC相连,这样穿缆过程中的拉力数据和行程数据就能够实时写入PLC的寄存器中。PLC通过通信电缆与PC机的串行通信口相连,在PC机中设置VB的MSCOMM控件来实现串口通信,这样PC机就能读取PLC寄存器中的拉力和行程数据,对穿缆过程进行实时监控。

2、 工控PC机与主控PLC的自由口通信协议

工控PC机标准的串口为RS232C,S7-200系列提供的串口为RS485,利用西门子公司提供的PC/PPI电缆,可以方便地实现S7-200系列PLC与PC之间硬件连接。

上位机向PLC发送指令(即指令帧),指令帧格式如图2所示,由起始字符、指令类型、目标PLC站地址、目标寄存器地址、读/写字节数、待写入的数据(当从PLC读数据时,具体数据部分为空)、校验码和结束字符组成。

例如写VB100开始的两个字节的指令帧如下:83H,06H,08H,00H,00H,64H,30H,32H,31H,32H,33H,34H,35H,36H,115H。下面按顺序说明每段字节的含义:

83H为字符“S”的ASCII码,表示指令的开始,在本设计中是固定的。

06H表示指令的类型,为写 *** 作。在本文中定义05H代表读 *** 作,06H代表写 *** 作。

08H,00H表示要写PLC中V存储区的内容。

00H,64H表示要从VB100开始写。

30H,32H表示要写两个字节。

31H,32H,33H,34H表示VB100写入12H,VB101写入34H。

35H,36H是校验和。

115H为字符“s”的ASCII码,是结束字符,表示指令的结束,在本设计中是固定的。

一条指令除包含数据外,还包含必要的控制字(如起始字符、结束字符、指令类型等)。如果指令中的数据直接以其原本的形式传输,则不可避免地会与指令中的控制字发生混淆。为了避免这种情况的发生,可以用文本来传送二进制数据。通过16进制ASCII码的格式来描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。这种格式可以表示任何的数值,仅仅使用ASCII代码的30H~39H(表示0~9)和41H~46H(表示A~F)。ASCII码的其余部分可以用作控制字。这样就避免PLC因接收到数据中错误的标志位而停止接收的错误。

在PLC接到上位机指令后,会向上位机发送一个反馈消息,即反馈帧,反馈帧格式如图3所示。其组成与指令帧基本相同,但它是由PLC发出的,所以具体数据段不同,在向PLC写数据时,反馈帧的具体数据部分为空,而在从PLC读数据时,具体数据部分不能为空。

例如,PLC接收到写VB100开始两个字节后的发送反馈帧如下:83H,02H,08H,00H,00H,64H,30H,32H,35H,36H,115H。下面按顺序说明每段字节的含义:

83H为字符“S”的ASCII码,与指令帧相同。

02H为状态信息,表示接收到上位机指令后PLC的执行状态。在本文中02H表示写入正确,相应地规定01H表示读取正确,03H表示BCC校验码错误,04H表示指令不合法。

08H,00H表示要写入PLC中V存储区的内容,与指令帧相同。

00H,64H表示要从VB100开始写,与指令帧相同。

30H,32H表示要写两个字节,与指令帧相同。需注意的是,此时具体数据段为空。

35H,36H是校验和,因无数据段,与指令帧可能不同。

115H为字符“s”的ASCII码,表示此帧结束,与指令帧相同。

3、 工控PC机软件设计

工控PC机端通信程序流程图如图4所示。发送指令帧后,注意查询反馈帧,如一定时间内没有接收到,应再次发送,两次无响应,则要提示通信故障或PLC不存在。

在工控PC机中可采用VB来实现上位机监控程序,通过MSCOMM控件就可控制串口通信,主要参数设置代码如下:

MSComm1Settings=“9600,N,8,1”

//串口通信参数设置

MSComm1CommPort=1

MSComm1PortOpen=True

MSComm1InputLen=0

4、 主控PLC软件设计

CPU224XP自由口通信模式的初始化是通过对特殊存储字节SMB30(PORT0)写入通信控制字来设置通信的波特率、奇偶校验、停止位和数据位数。SMB30中的内容如下:

PP:奇偶选择。00为无奇偶校验;01为偶校验;10为奇校验;11为保留。

D:每个字符的数据位。0为每个字符8位;1为每个字符7位。

BBB:自由端口波特率。本设计为010,表示波特率为9 600 b/s。

MM:协议选择。00为点到点接口协议的PPI从站模式;01为自由端口协议;10为PPI主站模式;11为保留。缺省设置为00,即PPI从站模式。

本文中传输速率固定为9 600 b/s,数据格式由1位起始位、8位数据位、无校验位、1位停止位组成。

配置自由口通信模式后,就可以进行数据的收发了。PLC通信程序框图如图5所示。接收数据指令RCV的命令格式为RCV TABLE,Port0,RCV指令可以接收一个或多个字符,一次最多接收255个字符。发送数据指令XMT的命令格式为XMT TABLE,Port0,激活发送缓冲区TABLE中的数据。数据缓冲区的第一个数据指明了要发送的字节数,最多有255个字符的缓冲区。

通信程序的设计需遵循一定的规则,例如,中断通信处理程序要短小精悍,要避免XMT与RCV指令在一个端口同时执行。本设计采用主从方式通信,PC设为主机,PLC设置为从机。只有PLC接收到指令帧后,才可能根据接收数据情况发送反馈帧。为简化程序设计,PC机只发出读指令和写指令两种指令帧。若为读指令,PLC准备好发送数据后执行XMT指令;若为写指令,PLC先把数据写入指定存储区,准备好应答数据后同样执行XMT命令;若接收到错误帧(如校验错误及不能识别的命令),PLC准备相应标志数据执行XMT指令。

主要代码如下:

LD SM00

MOVB 9,SMB30//设置端口0为:9 600,N,8,1

LD SM00//RCV指令初始化

MOVB 16#EC,SMB87

//允许接收信息,使用SMB88,SMB89。

MOVB 83,SMB88//设置起始字符为“S”

MOVB 115,SMB89//设置结束字符为“s”

MOVB +1000,SMW92//接收信息时间不能超过1 ms

MOVB 30,SMB94//接收的最大字符数,这里设置为30

R SMB872,1//复位SMB872,使其为0,忽略SMW92

LD SM00

ATCH RCVOVER,23

//将0口接收完成中断事件连接到RCVOVER上

LD SM00

ATCH XMTOVER,9、

//将0口发送完成中断事件连接到XMTOVER上

LD SM00

ENI//允许中断

S7-200自由口通信方式使用户可以自己定义PLC指令通信协议,与任何公开通信协议(如RS-422或RS-232C)接口设备进行通信,使通信范围大大增加,控制系统配制更加灵活。本通信程序用于ITER导体穿缆测力测长监控系统,PLC完成数据采集及现场控制,工控PC机实时显示导体穿缆的速度及行程,同时以梯形图和通信控件显示动作过程,便于监控及故障诊断,得到用户好评。本文设计的通信协议也可用于其他控制系统的监控。

以上就是关于C语言中如何用指针变量的方法来实现1输入的十个数的逆序输出啊、哪位大虾解答下感激不尽!!!全部的内容,包括:C语言中如何用指针变量的方法来实现1输入的十个数的逆序输出啊、哪位大虾解答下感激不尽!!!、模拟电子技术的课程设计(可调直流稳压电源)、主控是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10162571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存