proguam4
APAP4详解

1. ABAP/4 IntroductionIntroductionABAP/4(Advanced Business Application Programming)是SAP/R3目前唯一的系统发展工具, 属4GL, 语法比较近似Visual Basic或JAVA, 和传统third-generation 语言, 如C,PASCAL 有很大不同, 在程序模块(Program Structure Module)可分以下三个部分:1.Sequential coding within processing block与一般语言语法近似, 如IF,WHILE等, 但并没有GOTO叙述2.Reports呼叫一个独立的事件(Depending Event), 读取database 产生资料列表3.Dialog屏幕参数输入的对话框, 专门处理database 读取或异动的tranaction processBasic Languange Overview1.data element 宣告方式, 如数值, 字符资料变量宣告2.操作数(operate)使用, 如+ - * /3.Control element使用, 如Boolean 值4.特殊资料格式, 如日期与时间5.字符串字料处理function, 如部分字符串的截取6.子程序或自定函数的呼叫7.SQL语法使用8.数据结构的使用, 如process internal table的宣告与使用Reports Overview1.Reports Task, 如报表屏幕预览或打印机打印的选择2.Reports 模块是一个Stand-along 程序,3.database读取方式, 如可定义logical database(与磁盘的physical storage对映)4.报表数据的计算与产生5.报表的输出Dialog Overview1.专处理database 的读取与异动, 如使用SQL 指令2.Dialog 不是一个Stand-Along Progarm, 使用transaction code来产生屏幕对话框3.由flow logic 控制, flow logic分成PBO(Process Before Output)与PAI(Process After Input)2.Begin To Programming2.1 ABAP/4 EditorCreating ABAP/4 Program使用ABAP Workbench撰写程序(Choose Tools->ABAP/4 Workbench, Transaction Code: S001), 萤幕如下:可分成:1.ABAP/4 Editor :针对简单的报表或程序, 仅使用几个组件或不使用2.Obiect Browser :针对复杂的报表或程序, 如Dialog Transaction Module 撰写使用ABAP/4 Editor 撰写程序1.ABAP/4 Editor 画面如下(Transaction Code:SE38):2.输入程序名称, 如果是新程序, 按下”Create”, 如果修改已存在程序, 则按下”Change”或F6键在命名规则上, Reports程序为Yaxxxxxx或Zaxxxxxx, a表application module简称, 如s表SD Dialog程序为SAPMYxxx或SAPMZxxx3.输入程序Attribute(1).Title:程序描述或功能说明(2).Type:Execute mode: 1: Stand-along Program 如ReportsI: Include ProgramM: Module PoolF: Function GroupS: Subroutine Pool(3).Status:Program development status: P: SAP standard production programK: Customer production programS: System programT: Test program(4).Application: 程序所属的application module, 如F表Financeial acounting(5).Development class: 用于同一系统中各个program, 如果不属任一class, 可使用$TMP4.撰写Source CodeProgram 之后接的是程序名称, Write 是显示的意思, 会将所接的字符串在屏幕上显示, 注意每一行最后要有一个. (点), 表示叙述的结束, 储存后回ABAP/4 Editor画面5. 执行程序按”Execute”或F8键, 屏幕可见执行所得的结果重要的编辑键2.2 ABAP/4 Data ElementData TypeABAP/4 的资料型态可分成:Type Length Range Initial Value DescriptionC 1 1-65535Byte Space 字符串数据, 如‟Program‟D 8 8Byte …00000000‟ 日期资料, 格式为YYYYMMDDF 8 8Byte 0 浮点数I 4 -2^31至2^31-1 0 整数N 1 1-65535Byte …00…0‟ 数值所组成的字符串P 8 1-16Byte 0 Packed 数, 用在小数点数T 6 6Byte …000000‟ 时间资料, 格式为HHMMSSX 1 1-65535Byte X‟00‟ 16进位数变量宣告变量宣告包含name, type, length 和structure四个部分, 使用DATA 指令, 如DATA: S1 TYPE I,SUM TYPE I.常数宣告常数宣告使用CONSTANTS 指令, 如宣告PI 是一个小数点5位的值3.14159, CONSTANTS PI TYPE P DECIMALS 5 VALUE …3.14159‟.系统所定义资料这是由系统所定义的专有名辞, 如SPACE 空白字符串SY-SUBRC 系统执行传回值, 0 表示成功SY-UNAME logon 帐号SY-DATUM 系统日期SY-UZEIT 系统时间SY-TCODE 目前的transaction codeTYPE 叙述用来指定资料型态或宣告自定资料型态Example:TYPES: BEGIN OF MYLIST,NAME(10) TYPE C,NUMBER TYPE I,END OF MYLIST.DATA LIST TYPE MYLIST.LIKE 叙述跟TYPE叙述使用格式相同, 如DATA TRANSCODE LIKE SY-TCODE.不同的是LIKE 用在已有值的资料项, 如系统变量, 而TYPE叙述则是用在指定资料型态。
实验四非周期信号频域分析

实验四 非周期信号频域分析1 实验目的(1) 掌握傅里叶变换的分析方法及其物理意义。
(2) 掌握各种典型的连续时间非周期信号的频谱特征以及傅里叶变换的主要性质。
(3) 学习掌握利用MA TLAB 语言编写计算CTFT 的仿真程序,并能利用这些程序对一些典型信号进行频谱分析,验证CTFT 的若干重要性质。
2 实验原理及方法2.1连续时间信号傅里叶变换——CTFT傅里叶变换在信号分析中具有非常重要的意义,它主要是用来进行信号的频谱分析的。
傅里叶变换和其逆变换定义如下:⎰∞∞--=dt e t x j X t j ωω)()( 4-1 ⎰∞∞-=ωωπωd e j X t x t j )(21)( 4-2连续时间傅里叶变换主要用来描述连续时间非周期信号的频谱。
任意非周期信号,如果满足狄里克利条件,它可以被看作是由无穷多个不同频率(这些频率都是非常的接近)的周期复指数信号e j ωt 的线性组合构成的,每个频率所对应的周期复指数信号e j ωt 称为频率分量,其相对幅度为对应频率的|X(j ω)|之值,其相位为对应频率的X(j ω)的相位。
X(j ω)通常为关于ω的复函数,可以按照复数的极坐标表示方法表示为:X(j ω)=| X(j ω)|e j ∠ X(j ω)其中,| X(j ω)|称为x(t)的幅度谱, ∠X(j ω)称为x(t)的相位谱。
给定一个连续时间非周期信号x(t),它的频谱是连续且非周期的。
对于连续时间周期信号,也可以用傅里叶变换来表示其频谱,其特点是,连续时间周期信号的傅里叶变换是由冲激序列构成的,是离散的——这是连续时间周期信号的傅里叶变换的基本特征。
2.2 用MA TLAB 实现CTFT 及其逆变换2.2.1 用MATLAB 实现CTFT 的计算MA TLAB 进行傅里叶变换有两种方法,一种利用符号运算的方法计算,另一种是数值计算,本实验采用数值计算的方法。
严格来说,用数值计算的方法计算连续时间信号的傅里叶变换需要有个限定条件,即信号是时限信号,也就是当时间|t|大于某个给定时间时其值衰减为零或接近于零,这个条件与前面提到的为什么不能用无限多个谐波分量来合成周期信号的道理是一样的。
美国第四点计划

第四点计划Point Four Program。
也称“技术援助落后地区计划”,因为是1949年1月20日美国总统杜鲁门就职演说中提出的侵略计划中的第四点,故名。
该计划对象是发展中国家,是当时实施于西欧的“马歇尔计划”的补充。
1949年1月20日,美国总统杜鲁门在就职演说中,提出美国全球战略的四点行动计划,并着重阐述了第四点,即对亚、非、拉美不发达地区实行经济技术援助,以达到在政治上控制这些地区的目的。
这就是“第四点计划”。
又称“开发落后区域计划”。
(前三点计划是:支持联合国、战后欧洲经济复兴计划即“马歇尔计划”和援助自由世界抵御侵略。
这是一项利用美国先进的科学和发达的工业来改进和发展不发达地区的新计划。
同年6月24日,杜鲁门在致国会的特别咨文中对“第四点计划”的概念作了详尽的阐述。
根据“第四点计划”,美国国会于1950年6月通过了“援助不发达国家”的法案。
到1951年底“第四点计划”已扩展到33个国家。
自1945年7月1日到1967年6月30日,在累计达1172亿美元的美国对外经济和军事援助中30%以上是给予非共产主义的不发达国家。
“第四点计划”所开创的一系列对外援助计划,一直延续到今天,对世界政治和经济格局产生了重大而深远的影响。
战后,美国和苏联为扩张其势力范围不遗余力地展开争夺。
1947年2月21日,英国照会美国,声称因国内经济困难而无力继续向希、土提供援助。
鉴于希、土两国重要的战略地位,1947年3月12日,美国总统杜鲁门在国会两院联席会议上宣读了后来被称为“杜鲁门主义”(TrumanDoc trine)的国情咨文。
咨文强调,美国必须向希、土危机提供援助,以抵制苏联的“直接或间接侵犯”,如果丧失希腊,就会立刻危及土耳其和整个中东,“影响不仅远及东方,而且远及西方”(这便是“多米诺骨牌”理论的早期阐述)。
国会两院经过辩论后,分别于4月22日和5月8日通过关于援助希、土的法案,向两国政府提供4亿美元援助,帮助它们镇压本国的革命运动。
GDAL、Prj.4和GEOS库的编译与引用

GDAL的编译官方网站:/下载地址:/gdal/编译版本:GDAL1.8.0编译平台:Window XP(32位)+Visual Studio2008编译步骤:1、解压下载文件gdal180.zip到C:\gdal-1.8.0。
2、点击“开始—运行”,输入“cmd”,进入控制台界面。
3、编译C++版本gdal,依次输入以下命令:1)C:\Program Files\Microsoft Visual Studio9.0\VC\bin\vcvars32.bat2)cd C:\gdal-1.8.03)nmake/f makefile.vc4)nmake/f makefile.vc install5)nmake/f makefile.vc devinstall4、如需编译C#版本gdal,接着输入以下命令:1)cd C:\gdal-1.8.1\swig\csharp2)nmake/f makefile.vc工程引用:1、C++工程引用GDAL1)从C:\warmerda\bld\lib目录下复制gdal_i.lib文件,从C:\warmerda\bld\bin目录下复制gdal18.dll文件,以及复制C:\warmerda\bld\include整个文件夹到C++工程目录下。
2)以Visual C++6.0为例,点击“Project-Settings”菜单,在C/C++页面,在[Category]项选择[Preprocessor]选项,在[Additional include directories]项下添加“include”值,即将编译的gdal的头文件目录添加到工程中。
转到Link页面,在[Object/library modules]选项下添加“gdal_i.lib”3)在需要使用gdal的时候添加相应的头文件。
2、C#工程引用GDAL1)从C:\gdal-1.8.0\swig\csharp目录下复制gdal_csharp.dll、gdal_wrap.dll、gdalconst_csharp.dll、gdalconst_wrap.dll、ogr_csharp.dll、ogr_wrap.dll、osr_csharp.dll、osr_wrap.dll,以及从C:\warmerda\bld\bin目录下复制gdal18.dll共9个文件到C#工程中。
第四点计划

第四点计划
Point Four Program。也称“技术援助落后地区计划”,因为是1949年1月20日美国总统杜鲁门就职演说中提出的侵略计划中的第四点,故名。该计划对象是发展中国家,是当时实施于西欧的“马歇尔计划”的补充。
ATTT深外《ATicketToTomorrow》Program4答案

ATTT深外《ATicketToTomorrow》Program4答案ATTT PROGRAMME 4The International coffee Shop Mr. English: Hi, Tamara!Tamara: Hi, Mr. English. I’m so glad to see you. Mr. English: I’m glad to see you, too. How are you? Tamara: I’m fine, but I’m hungry.Mr. English: Well, it is lunchtime. And there’s avery good restaurantaround the corner: The International Coffee Shop. Tamara: Do they serve only coffee there?Mr. English: No, they serve food and drinks from many different countries.Tamara: Oh, tha t’s wonderful. I’d like to try something new.Mr. English: Great. Let’s go!Deng_deng_deng_deng_deng_deng Here we are!1Waiters: WELE! WELE! WELE! WELE! YOUR TABLE IS READY. E THIS WAY. WE’RE SERVING SOME SPECIAL DISHES TODAY! Mr. English: What are they? Waiter 1: WE HAVE SPAGHETTI AND MEAT SAUCE FROM ITALY. Waiter 2: OR YOU MIGHT WANT TO TRY A GOULASH FROM HUNGRAY. Tamara: What’s goulash? Waiter 2: SOME PIECES OF BEEF2AND SOME VEGETABLES, TOO. Waiter 3: AND WE HAVE MANY OHER DISHES. HER E’S A MENU FOR YOU! Waiter 4: TAKE YOUR TIIME TO DECIDE. Waiter 1: BUT MAY I REMEND A SALAD ON THE SIDE? Tamara: Oh, Mr. English. Look at this menu. It’s very international!Mr. English: Yes, it is.Waiter 1: Would you like a taco? A taco is a thin, fried pancake with meat and lettuce inside. Tamara: What country are tacos from?Waiter 2: Tacos are from Mexico. Or how about a quiche? Tamara: Quiche?Waiter 3: Yes. A quiche is a cheese pie from France. Tamara: Hmm…goulash from Hungary, spaghett i from Italy3, tacos from Mexico, and quiche from France. Arethere any dishes from the United States?Waiter 4: Well, you can have a hamburger. Tamara: Oh, it’s very difficult to decide!Waiter 1: WHAT WOULD YOU LIKE? Waiter 2: WHAT CAN I GET YOU? Waiter 3: WHAT WILL YOU HAVE? Waiter 4: WHAT’LL IT BE? Mr. English: I’LL HAVE THE GOULASH ANDA CUP OF TEA. Tamara: AND JUST A CUP OF COFFEE AND A HAMBURGER FOR ME. Mr. English: A hamburger? Tamara: Yes,a hamburger.4Waiter 1: How would you like it? Tamara: Excuse me?Waiter 1: How would you like your hamburger?RARE? Waiter 2: MEDIUM? Waiter 3 & Waiter 4: OR WELL DONE? Tamara: Oh…I don’t know. Waiter 1: WELL, HOW ABOUT RARE? IF THE HAMBURGER IS RARE, WE COOK THE MEAT FOR A VERY SHORT TIME, AND THE HAMBURGER IS RED INSIDE. IT’S RARE. Tamara: NO, I DON’T CARE FOR5。
Program EQP-4调音器插件使用说明书

Program EQP-4均衡器使用详解2012-04-28 10:14:25| 分类:默认分类|字号大中小订阅提升声卡音质的foobar2000插件新蓝管Program EQP-4均衡器界面如下:通常这部分不常使用,如图:(尽量不要动它)常使用部分1:注意:1.让BOOST和ATTEN字母间的按钮状态如图所示,分别表示低切和高切,这样调出来的均衡曲线较为清晰。
2.最左边的按键。
上面从80~无穷的按键的意思是高通滤波器的滤波频点,可以选择80Hz、60Hz等等,无穷就是不滤波了。
3.两边的低频(左)和高频(右),均衡音效的调节主要在这部分,这个均衡器很有趣,设有增益(boost)和衰减(atten)两个钮,而且同一频点。
有人会问,假如增益和衰减相同,不就等于没增益衰减吗?其实不是,可以自己试一下就会知道其中差别,增益是有谐波失真的,而且增益和衰减相加的效果又完全不同。
调节时一定要根据不同的音源来调节。
注意两个旋钮下面部分两个频段旋钮正上方的数字就是你要调节的频段。
频段效果参照下面音感特征作相应调节。
30~60Hz沉闷如没有相当大的响度,人耳很难感觉。
60~100Hz沉重80Hz附近能产生极强的“重感”效果,响度很高也不会给人舒服的感觉,可给人以强烈的刺激作用。
100~200Hz丰满200~500Hz力度易引起嗡嗡声的烦闷心理。
500~1KHz明朗800Hz附近如提升10dB,会明显产生一种嘈杂感,狭窄感。
1K~2KHz透亮2800Kz附近明亮感关系最大。
2K~4Kz清脆3400Hz易引起听觉疲劳。
4K~8Kz尖锐6800Hz形成尖啸,锐利的感觉。
8K~16Kz纤细>7.5KHz音感清彻纤细。
调节时,先选择相应的调节频段,再去分别调节上面的增益或衰减旋钮。
例:原始音频文件的低音过于浑浊,我们可先将左边的频段旋钮调到大于120Hz的部分,因为这个频段影响着低音的浑浊程度。
然后调整上方的增益和衰减旋钮,以达到最好效果。
2003年第九届奥林匹克分区联赛初赛试题(普及组)

●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分,共30分) 1.下列计算机设备中,既是输入设备,又是输出设备的是( )。
A)键盘 B)触摸屏 C)扫描仪 D)投影仪 E)数字化仪2.下列分辨率的显示器所显示出的图像,最清晰的是( )。
A)800*600 B)1024*768 C)640*480 D)1280*1024 E)800*10003.下列说法中,正确的是( )。
A)在内存中,可执行程序用二进制码表示,源程序用八进制表示。
B)程序和数据在内存中都是用二进制码表示的。
C)内存中数据的存取是以二进制位为单位的。
D)中央处理器CPU执行的每条指令的长度都不同。
E)一般来说,在计算机内部,中文信息用十六进制表示,英文信息用八进制表示。
4.下列说法中,错误的是( )。
A)程序是指令的序列,它有三种结构:顺序、分支和循环。
B)地址总线决定了中央处理器CPU所能访问的最大内存空间的大小。
C)中央处理器CPU内部有寄存器组,用来存储数据。
D)不同厂家生产的CPU所能处理的指令集不一定相同。
E)数据传输过程中不可能会出错。
5.CPU访问内存的速度比访问下列哪个存储设备要慢( )。
A)寄存器 B)硬盘 C)软盘 D)磁带 E)光盘6.下列电子邮件地址,正确的是( )。
A)wang@ B)cai@jcc.pc.tool@.jpC)162.105.111.22 D)E)http://7.数字图像文件可以用下列哪个软件来编辑( )。
A)画笔(Paintbrush) B)记事簿(Notepad) C)RecorderD)WinRAR E)MidiSoft8.下列哪个软件不是操作系统软件的名字( )。
A)Windows XP B)DOS C)Linux D)OS/2 E)Arch/Info9.下列哪个不是个人计算机的硬件组成部分( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//实验四:中断使用//基本要求:1.理解中断的执行,2.学会单片机的定时器中断,和串口中断3.完成电子钟程序/**************************1************************///定时器中断程序,P3口以500Hz闪烁#include <reg51.h>void Timer1() interrupt 3{TF1=0;TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停)TH1 = 0xfc;TL1 = 0x66; //重新设置定时器初值,设置时间为1msTR1 = 1; //重新启动定时器P3=~P3; //P3取反}///////////////////main()//////////////void main(){EA = 0;//EA=0 中断总禁止,禁止所有中断。
TMOD &= 0x0F;//TMOD |= 0x10;/* GATE=0以运行控制位TR启动定时器C/T=0定时工作方式M1、M0=01 方式1 */TH1 = 0xfc;//给定时器计数器的高八位赋值TL1 = 0x66;//给定时器计数器的低八位赋值/*计算方法:定时时间=(2exp16一计数初值)×晶振周期×12采用11.0592MHz的晶振,定时时间1ms */ TR1 = 1;//定时器1开始计时TF1=0;EA=1;ET1=1;while(1){;}}/**************************2************************///定时器中断程序,P3口以0.5Hz闪烁#include <reg51.h>void Timer1() interrupt 3{unsigned int num;TF1=0;TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停)TH1 = 0xfc;TL1 = 0x66; //重新设置定时器初值,设置时间为1msTR1 = 1; //重新启动定时器if(num==1000) //是否定时了1000次,1ms的时间{num=0;P3=~P3; //P3取反}elsenum++;}///////////////////main()//////////////void main(){EA = 0;//EA=0 中断总禁止,禁止所有中断。
TMOD &= 0x0F;//TMOD |= 0x10;/* GATE=0以运行控制位TR启动定时器C/T=0定时工作方式M1、M0=01 方式1*/TH1 = 0xfc;//给定时器计数器的高八位赋值TL1 = 0x66;//给定时器计数器的低八位赋值/*计算方法:定时时间=(2exp16一计数初值)×晶振周期×12采用11.0592MHz的晶振,定时时间1ms */ TR1 = 1;//定时器1开始计时TF1=0;EA=1;ET1=1;while(1){;}}/************************************3*********************************//*单片机串口中断程序*//****************************************************************************** ******************************************************************************* 描述: * * com.c单片机接收主机的数据,将数据加1, 并传回给主机; *********************************************************************************/#include <reg51.h>/*函数:UartINTSVC功能:串行口中断服务程序*/unsigned char c;void UartINTSVC() interrupt 4{if ( RI ) //接收中断{c = SBUF;RI = 0;c++;SBUF =c ;}}void main(void){TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率TH1 = 0xFD; // 波特率9600TL1 = 0xFD;SCON = 0x50; // 设定串行口工作方式PCON &= 0xef; // 波特率不倍增TR1 = 1; // 启动定时器1//IE = 0x00; // 禁止任何中断ES = 1; //允许串行口中断EA = 1; //允许中断while(1) {;}}/****************************************************************************** ******************************************************************************* ** 描述: ** com.c单片机接收主机的数据,将数据加1, 传回给主机,并在数码管上显示接收到的数字; *********************************************************************************/ #include <reg51.h>unsigned char led[17]={//定义0123456789的数码管字型数据,按gfedcba的顺序0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsigned char led_bit[4]={//定义数码管的公共端0xFE,0xFD,0xFB,0XF7};unsigned char led_buff[4];//显示数据缓冲区unsigned char c=0;//串口接收到的值/*函数:UartINTSVC功能:串行口中断服务程序*/void UartINTSVC() interrupt 4{if ( RI ) //接收中断{c = SBUF;RI = 0;SBUF =c+1 ;}}//////////////void delay(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<10;j++);//软件延时}void main(void){unsigned char led_num=0;//unsigned char tmp=0;TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率TH1 = 0xFD; // 波特率9600TL1 = 0xFD;SCON = 0x50; // 设定串行口工作方式PCON &= 0x7f; // 波特率不倍增TR1 = 1; // 启动定时器1//IE = 0x00; // 禁止任何中断ES = 1; //允许串行口中断EA = 1; //允许中断while(1){led_buff [0]= led [0];//最高位,千位显示0led_buff [1]= led [c/100%10];//百位显示total变量的百位值led_buff [2]= led [c/10%10]; //十位显示total变量的十位值led_buff [3]= led [c%10];// //个位显示total变量的个位值//数码管显示for(led_num=0;led_num<4;led_num++){P2=(P2|0x0f); //数码管的公共端全部为高电平,数码管全部不显示P0= led_buff[led_num];//往P0口送要显示的段码值P2=(P2 & led_bit[led_num]);//打开需显示的数码管的公共端delay();//延时}}}/**********************************4***********************************/ //简单时钟程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intunsigned char DispBuf[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uchar hour=12,minute=0,second=0,set_flag=0;//uint m_second_1=0;uchar led_bit=0;//code unsigned char com[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};code unsigned char Tab[] ={//定义0123456789-的数码管字型数据,按gfedcba的顺序/////// -0x3F,0x06,0x5B,0x4F,0x66, //////0X400x6D,0x7D,0x07,0x7F,0x6F,0x40 ////////};/*函数:T1INTSVC()功能:定时器T1的中断服务函数说明:晶振频率为11.0592MHz定时器初值=65536-T*(f0/12),其中f0为晶振频率,T为定时时间*/void T1INTSVC() interrupt 3{TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停)TH1 = 0xfc;TL1 = 0x66; //重新设置定时器初值,设置时间为1msTR1 = 1; //重新启动定时器/***********计时任务********************/if(m_second_1>=999){m_second_1=0;if(second==59){second=0;if(minute==59){minute=0;if(hour==12){hour=1;}else hour++;}else minute++;}else second++;}else m_second_1++;/*******************数码管动态扫描******************/ if(led_bit>7) led_bit=0;P3 = 0xFF; //暂停显示P2 =DispBuf[led_bit];P3 =~com[led_bit]; //重新显示led_bit++;}/*函数:SysInit()功能:系统初始化*/void SysInit(){EA = 0;//关闭总中断TMOD &= 0x0F;//定时器1工作在模式1TMOD |= 0x10;TH1 = 0xfc;//定时器赋初值TL1 = 0x66;TR1 = 1;//定时器1开始工作ET1 = 1;//定时器1中断使能EA = 1;//总中断使能}/****************main()***********************/void main(){SysInit();while(1){/******数码管显示内容*********//*第一,二个数码管显示秒钟*/DispBuf[0]=Tab[second%10];DispBuf[1]=Tab[second/10];/*第三个数码管显示-*/DispBuf[2]=Tab[10];//小数点灭/*第四,五个数码管显示分钟*/DispBuf[3]=Tab[minute%10];DispBuf[4]=Tab[minute/10];/*第六个数码管显示-*/DispBuf[5]=Tab[10];/*第七,八个数码管显示时钟*/DispBuf[6]=Tab[hour%10];DispBuf[7]=Tab[hour/10];}}/**********************************5***********************************/ //调时时钟程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intunsigned char DispBuf[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uchar hour=12,minute=0,second=0,set_flag=0;//uint m_second_1=0;uchar led_bit=0;//code unsigned char com[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};code unsigned char Tab[] ={//定义0123456789-的数码管字型数据,按gfedcba的顺序/////// -0x3F,0x06,0x5B,0x4F,0x66, //////0X400x6D,0x7D,0x07,0x7F,0x6F,0x40 ////////};/*函数:T1INTSVC()功能:定时器T1的中断服务函数说明:晶振频率为11.0592MHz定时器初值=65536-T*(f0/12),其中f0为晶振频率,T为定时时间*/void T1INTSVC() interrupt 3{TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停)TH1 = 0xfc;TL1 = 0x66; //重新设置定时器初值,设置时间为1msTR1 = 1; //重新启动定时器/***********计时任务********************/if(m_second_1>=999){m_second_1=0;if(second==59){second=0;if(minute==59){minute=0;if(hour==12){hour=1;}else hour++;//小时加一}else minute++;//分钟加一}else second++;//秒钟加一}else m_second_1++;/*******************数码管动态扫描******************/if(led_bit>7) led_bit=0;P3 = 0xFF; //暂停显示P2 =DispBuf[led_bit];//更新扫描数据P3 =~com[led_bit]; //重新显示led_bit++;}/*函数:key_scan()功能:键盘扫描*/void key_scan(){uchar k=0;k=P1&0X07;if(k!=7)// delay_ms(10);k=P1&0X07;switch(k){case 6: //如果模式键按下if(set_flag==3) set_flag=0;//模式切换,在正常走时(0),时钟调整(1),分钟调整(2),秒钟调整(3)四种状态中切换else set_flag++;break;case 5://如果加键按下{switch(set_flag){case 1://时钟调整(1){if(hour==12) hour=1;else hour++;}break;case 2://分钟调整(2){if(minute==59) minute=0;else minute++;}break;case 3://秒钟调整(3){if(second==59) second=0;else second++;}break;default: break;}}break;case 3://如果减键按下{switch(set_flag){case 1:{if(hour==1) hour=12;else hour--;}break;case 2:{if(minute==0) minute=59;else minute--;}break;case 3:{if(second==0) second=59;else second--;}break;default: break;}}break;default: break;}}/*函数:SysInit()功能:系统初始化*/void SysInit(){EA = 0;//关闭总中断TMOD &= 0x0F;//定时器1工作在模式1TMOD |= 0x10;TH1 = 0xfc;//定时器赋初值TL1 = 0x66;TR1 = 1;//定时器1开始工作ET1 = 1;//定时器1中断使能EA = 1;//总中断使能}/******************软件延时*******************/void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255 {uchar i;while(ms--)for(i = 0; i < 124; i++);}/****************main()***********************/void main(){uchar flash_fq=0;bit turn=1;SysInit();while(1){//**********键盘扫描部分**********key_scan();//******数码管显示内容*********if(flash_fq==2){if(turn==0) turn=1;else turn=0;flash_fq=0;}else flash_fq++;switch(set_flag){case 0: //正常走时{//第一,二个数码管显示秒钟DispBuf[0]=Tab[second%10];DispBuf[1]=Tab[second/10];//第三个数码管显示DispBuf[2]=Tab[10];//第四,五个数码管显示分钟DispBuf[3]=Tab[minute%10];DispBuf[4]=Tab[minute/10];//第六个数码管显示DispBuf[5]=Tab[10];//第七,八个数码管显示时钟DispBuf[6]=Tab[hour%10];DispBuf[7]=Tab[hour/10];}break;case 1://时钟调整{//第一,二个数码管显示秒钟DispBuf[0]=Tab[second%10];DispBuf[1]=Tab[second/10];//第三个数码管显示DispBuf[2]=Tab[10];//第四,五个数码管显示分钟DispBuf[3]=Tab[minute%10];DispBuf[4]=Tab[minute/10];//第六个数码管显示DispBuf[5]=Tab[10];//第七,八个数码管显示时钟if(turn==0)//显示时钟{DispBuf[6]=Tab[hour%10];DispBuf[7]=Tab[hour/10];}else//时钟显示全黑{DispBuf[6]=0;DispBuf[7]=0;}break;case 2://分钟调整{//第一,二个数码管显示秒钟DispBuf[0]=Tab[second%10];DispBuf[1]=Tab[second/10];//第三个数码管显示DispBuf[2]=Tab[10];//第六个数码管显示DispBuf[5]=Tab[10];//第七,八个数码管显示时钟DispBuf[6]=Tab[hour%10];DispBuf[7]=Tab[hour/10];//第四,五个数码管显示分钟if(turn==0){DispBuf[3]=Tab[minute%10];DispBuf[4]=Tab[minute/10];}else{DispBuf[3]=0;DispBuf[4]=0;}}break;case 3://秒钟调整{//第三个数码管显示DispBuf[2]=Tab[10];//第四,五个数码管显示分钟DispBuf[3]=Tab[minute%10];DispBuf[4]=Tab[minute/10];//第六个数码管显示DispBuf[5]=Tab[10];//第七,八个数码管显示时钟DispBuf[6]=Tab[hour%10];DispBuf[7]=Tab[hour/10];//第一,二个数码管显示秒钟if(turn==0){DispBuf[0]=Tab[second%10];DispBuf[1]=Tab[second/10];else{DispBuf[0]=0;DispBuf[1]=0;}}break;default: break;}delay_ms(160);delay_ms(50);}}。