单片机键盘输入编程(C语言)
单片机C语言编程学习

单片机C 语言编程学习一、概述在一个集成电路芯片上集成微处理器、存储器、I/0接口电路,从而构成了单片机。
Intel公司推出了MCS-51系列单片机:集成8位CPU、4K字节ROM、128字节的RAM、4个8位并口、一个全双工串行口、2个16位定时器/计数器。
寻址范围64K,并有控制功能较强的布尔处理器。
二、预备知识<一>、电平特性1、数字电路中只有两种电平:高和低(本课程中)定义单片机为TTL电平:高+5V 低0V2、RS232电平:计算机的串口(-9V~15V) 高-12V 低+12V (+3V~+15V)所以计算机与单片机之间通讯时需要加电平转换芯片max232。
<二>、二进制与十六进制的表示及转换1、二进制:数字电路中的两种电平特性决定了它:0 0 6 110 12 11001 1 7 111 13 11012 10 8 1000 14 11103 11 9 1001 15 11114 100 10 1010 16 100005 101 11 10112、十六进:是二进制的简短表示形式。
十进制中的0-15分别表示为十六进制的0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F3、熟练掌握二进制与十六进制之间的转换。
规律:一般把四个二进制数放在一起转换成一个十六进制数,转换时先把二进制数转换成十进制数,再把十进制数转换成十六进制数。
如:0001B -> 1 -> 1HB表示为二进制,H为十六进制1001B -> 9 -> 9H1010B -> 10 -> AH0010 1100 -> 44 -> 2CH4、二进制各种对制关系:<三>、二进制数的逻辑运算1. “与”运算“与”运算是实现“必须都有,否则就没有”这种逻辑关系的一种运算。
运算符为“· ”, 其运算规则如下:0·0=0, 0·1=1·0=0, 1·1=12. “或”运算“或”运算是实现“只要其中之一有,就有”这种逻辑关系的一种运算, 其运算符为“+”。
51单片机C语言编程入门(详讲版)

中国科学技术大学业余无线电协会编目 录§1 前言 (1)§2 单片机简介 (2)2.1 数字电路简介 (2)2.2 MCS-51单片机简介 (2)2.3 Easy 51 Kit Pro简介 (5)2.4 Easy 51 Kit Pro电路功能分析 (5)§3 MCS-51单片机的C语言编程 (8)3.1 汇编语言 (8)3.2 建立你的第一个C项目 (8)3.3 生成hex文件 (12)3.4 Keil C语言 (14)3.5 单片机I/O (18)3.6 中断 (25)3.7 定时器/计数器 (27)3.8 定时器的应用举例 (29)3.9 外部中断 (34)3.10 串行通信 (38)3.11 定时器2 (43)3.12 看门狗 (47)3.13 空闲模式和掉电模式 (50)§4 MCS-51单片机C语言编程应用进阶 (51)4.1 扫描式键盘 (51)4.2 EEPROM芯片AT93C46的读写 (55)4.3 Keil C的高级使用 (63)§5 编写高质量的单片机C程序 (64)5.1 文件结构 (64)5.2 程序的版式 (66)5.3 单片机程序命名规则与变量选择 (70)5.4 表达式和基本语句 (73)5.5 函数设计 (77)5.6 单片机程序框架 (79)附图:Easy 51 Kit Pro电路图(最小系统板) (80)附图:Easy 51 Kit Pro电路图(学习板) (81)§1 前言什么是单片机,目前还没有一个确切的定义。
普通认为单片机是将CPU、RAM、ROM、定时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。
简称为单片微机或单片机。
利用单片机程序,可以实现对硬件系统的小型化的智能控制。
单片机C语言(模块一)

《单片机原理及应用(二)》模块一C51程序设计基础任务1:实例导航第二章C与80512.1 8051的编程语言1、8051的编程语言(四种):(1)BASIC语言(2)PL/M√(3)汇编语言√(4)C语言目前,汇编语言和C语言是广泛使用的两种单片机编程语言。
在未来的一段时间内,汇编语言和C语言还将同时存在,但从发展趋势看,C语言有逐渐取代汇编语言的可能。
最好的单片机编程者应是具有汇编语言基础,又精通C语言的。
2、C语言的优点(与汇编语言相比):(P41)(1)对单片机的指令系统不要求了解,仅要求对8051的存储器结构有所了解(2)寄存器的分配、不同存储器的寻址及数据类型等细节由编译器管理(3)程序有规范的结构,由不同的函数组成,这种方式可使程序结构化(4)编程及程序调试时间显著缩短,从而提高效率(5)提供库函数,具有较强的数据处理能力3、8051单片机C语言(单片机C51语言)了解一下单片机的种类:(查资料)2.2 Cx51编译器编译:C语言源程序转换成机器语言目标程序的过程,叫做编译。
编译器:能自动完成编译过程的一种计算机软件。
(1)C语言编译器(标准C)(2)C51编译器(经典8051单片机)(3)C x51编译器(经典8051单片机及派生产品)Cx51编译器完全遵照ANSI C语言标准,支持C语言的所有标准特征。
另外,还增加了可以直接支持8051结构的特征。
典型产品:KILE套装工具软件----------uVision2 集成开发环境的使用(P 302)例2-1:用uVision2软件编译调试一个C51程序(HELLO.C)基本步骤:(1)创建一个新项目(建在一个新文件夹下)并为项目选择一个CPU(此时会自动加入启动文件)(2)创建新程序文件(或打开旧程序文件)此例中,打开c:\kile\c51\examples\hello(3)将源文件添加到项目中此时还可修改工具选项(4)编译和链接项目(Build Target命令):翻译和链接源文件,并生成一个可以载入到uvision2调试器进行调试的绝对目标模块。
单片机C语言入门教程

单片机C语言入门教程来源:21ic作者:关键字:单片机C语言入门教程学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好。
Keil 软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(?Vision)将这些部份组合在一起。
学习之前请先安装KEILC51软件,在学会使用汇编语言后,学习C语言编程是一件比较容易的事,我们将通过一系列的实例介绍C语言编程的方法。
图1-1所示电路图使用89c51单片机作为主芯片,这种单片机性属于80C51系列,其内部有8K的FLASH ROM,可以反复擦写,非常适于做实验。
89c51的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的任务是让接在P1引脚上的发光二极管按要求发光。
1 简单的C程序介绍例1-1:让接在P1.0引脚上的LED发光。
/************************************************单灯闪烁程序*************************************************/#include "reg51.h"//这一句是将51的常用端口,内部寄存器等的定义文件包含进这段程序sbit P1_0=P1^0;void main(){ P1_1=0;}这个程序的作用是让接在P1.0引脚上的LED点亮。
下面来分析一下这个C语言程序包含了哪些信息。
1)"文件包含"处理。
程序的第一行是一个"文件包含"处理。
所谓"文件包含"是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行。
这里程序中包含REG51.h文件的目的是为了要使用P1这个符号,即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量。
AVR单片机C语言编程

}
2021/1/28
6
机电系统控制电路设计
1 C语言基础
关于编译预处理(宏定义)
❖ #define PI 3.14159 ---不带参数 #define S(a,b) a*b---带参数 ❖ #define — 宏定义命令 ❖ PI — 符号常量(宏名,最好用大写,以区别一般变量) ❖ 3.14159 —宏体(可以是一个表达式,如3+4) ❖ 作用:用简单符号代表宏体部份内容(编译时会先自动替换) ❖ 意义:直观/多次使用/便于修改 ❖ 注意: #define 可出现在程序的任一位置
#include <math.h>
/*编译预处理——文件包含*/
main( )
/*主函数*/
{
float r,s;
/*定义变量r、s类型为单精度实型*/
r =1.0;
/*变量r赋初值*/
s=PI * pow(r,2);
/*计算圆面积s*/
printf ("半径R=%f 时,面积S=%f \n",r,s); /*输出结果*/
执行部份:输入、赋值、计算、控制、输出等:
r=1.0;
/*变量r赋初值*/
s=PI*pow(r,2);
/*计算圆面积s*/
printf("半径R=%f 时,面积S=%f \n",r,s); /*输出结果*/
2021/1/28
11
机电系统控制电路设计
1 C语言基础
其他函数
❖ 标准库函数——只能调用 。使用方法: ⒈先“包含”,即将该函数所在头文件包含在程序中。 例: #include <stdio.h> ⒉后调#用in。clu调de用<方m式at:h.h函>数名(参数) main( ) { …… s=PI*pow(r,2); …… printf(“半径R=%f 时,面积S=%f\n”,r,s); } 说明:pow(x,y) 求xy (math.h中的标准数学函数) printf(……); (stdio.h中的标准输出函数)
51单片机C语言编程规范

C51程序结构
原码工作室
(3)C51变量的存储模式与标准C中变量的存储模 式不一样,C51中变量的存储模式是与89C51单片机 的存储器紧密相关;
(4)C51与标准C的输入输出处理不一样,C51中 的输入输出是通过89C51串行口来完成的,输入输出 指令执行前必须要对串行口进行初始化;
Int a ;
部变量。在一个函数体 内,要使用一个已在该函数体外或别的程序中定义过的 外部变量时,该变量在该函数体内要用extern说明。外部 变量被定义后分配固定的内存空间,在程序整个执行时 间内都有效,直到程序结束才释放。
3.static:
本章主要以KEIL编译器介绍89C51单片机C语言 程序设计。
C51程序结构
原码工作室
C51的语法规定、程序结构及程序设计方法都与 标准的C语言程序设计相同,但C51程序与标准的C 程序在以下几个方面不一样:
(1)C51中定义的库函数和标准C语言定义的库 函数不同。标准的C语言定义的库函数是按通用微型 计算机来定义的,而C51中的库函数是按89C51单片 机相应情况来定义的;
源码工作室
原码工作室
学习单片机C语言的必要性
随着单片机性能的不断提高,C语言编译调 试工具的不断完善,以及现在对单片机产品辅助 功能的要求、对开发周期不断缩短的要求,使得 越来越多的单片机编程人员转向使用C语言,因 此有必要在单片机课程中讲授“单片机C语言”。
C语言编程的优势
原码工作室
1.语言简洁、紧凑,使用方便、灵活。
signed int数据用补码表示。
原码工作室
PIC 单片机的C 语言编程

PIC单片机C语言编程讲义奥科电子工作室(内部资料)2006年元月第一版第1章 PIC 单片机的C 语言编程1.1 PIC 单片机C 语言编程简介用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到越来越广泛的运用。
针对PIC 单片机的软件开发,同样可以用C 语言实现。
但在单片机上用C 语言写程序和在PC 机上写程序绝对不能简单等同。
现在的PC 机资源十分丰富,运算能力强大,因此程序员在写PC 机的应用程序时几乎不用关心编译后的可执行代码在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。
写单片机的C 程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用的C 语言程序。
这就是为什么前面所有章节中的的示范代码全部用基础的汇编指令实现的原因,希望籍此能使读者对PIC 单片机的指令体系和硬件资源有深入了解,在这基础之上再来讨论C 语言编程,就有水到渠成的感觉。
本讲稿围绕中档系列PIC 单片机来展开讨论,Microchip 公司自己没有针对中低档系列PIC单片机的C 语言编译器,但很多专业的第三方公司有众多支持PIC 单片机的C 语言编译器提供,常见的有Hitech、CCS、IAR、Bytecraft 等公司。
其中笔者最常用的是Hitech 公司的PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机进行系统设计和开发的工程师群体中得到广泛认可。
其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。
另外,Hitech 公司针对广大PIC 的业余爱好者和初学者还提供了完全免费的学习版PICC-Lite 编译器套件,它的使用方式和完全版相同,只是支持的PIC 单片机型号限制在PIC16F84、PIC16F877 和PIC16F628 等几款。
c语言键盘操作

第一章编程技术实现本章内容简介:本章主要介绍如何实现键盘和鼠标的输入,图形图像技术,动画技术,发声技术,汉字显示技术,精确的时间控制技术。
是编写大型程序的基本功。
虽然每个技术所涉及的内容很少,所提及的函数也很少,但是当它们组合在一起的时候,就可以编写大型程序。
一、键盘:首先有必要介绍一下计算机是如何来处理键盘输入的数据的键盘里面有一个微处理器,用来扫描和检测每个键的按下或者抬起的状态,然后向主机传送一个字节的键盘扫描码,键盘扫描码翻译成对应的ASCⅡ码。
作为编程来说,只要知道每个按键都有对应的ASCⅡ码。
由于ASCⅡ码不能将键盘上所有的按键全部包括,因此有些控制键如Ctrl、Alt、End、Home和Del等用扩充的ASCⅡ码表示。
至于每个按键所对应的ASCⅡ码到底是什么,这里介绍一个函数可以实现该功能:int bioskey(int n)该函数声明在bios.h头文件中,所以调用之前需要在程序开始的位置写上#include<bios.h>,(以后如果第一次碰到的函数可以在TC根目录下的include文件夹中的头文件中查找,可以用记事本打开。
)参数n用来确定该函数的三个功能,具体如下表所示表1-1如选参数n为2时,当某位为1时,表示相应的键已按,或相应的控制功能已有效,若key值为0x09, 那么从表1-2中可以得知右Shift键和Alt键被按下,因为只有0x01和0x08相加和为0x09。
若该函数还是无法理解也不影响最后编小游戏,故此处不做详细介绍。
表1-2例1-1:#include<bios.h>int main ( ){int key;key=bioskey(0);printf(“%x”,key);}/* 该例子中,若按下键盘上的UP (↑)键,屏幕会显示4800(16进制),用16进制是一种习惯,在上表2中也体现了这种习惯的合理性。
*/例1-2:#include<stdio.h>#include<bios.h>int main(){int i , s;for(i=0;i<5000;i++){delay(1); /*delay()函数用于延时,即使同样的参数会根据不同的实际情况的不同而延时不同的时间,精确的时间控制请参阅《精确的时间控制》(超链接)一章*/if(bioskey(1)!=0){s=1;break;}}printf(“hello”);}}/* 该例中用了一个5000次的循环,每次延时1,每次去判断是否有按键被按下,如果有,则跳出循环,马上去执行printf(“hello”);若5000次循环里面都没有按键按下,在循环结束后,执行printf(“hello”);这种方法对于最后编小游戏非常有用,在最后的吃豆子放炸弹(超链接)例子中会再次提到*/最后再介绍一个函数:int kbhit(void);该函数声明在conio.h头文件中,所以调用之前需要在程序开始的位置写上#include<conio.h>若按了键盘,该函数返回1,否则返回0;C语言也可以实现鼠标的操作,但由于这种方法效率低,现在的面向对象的编程都不是用C语言的鼠标操作手段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习过单片机技术的人都知道,单片机的按键输入一般可分为简单的独立式按键输入及行列式键盘输入两种。
图1为简单的独立式键盘输入示意图,独立式键盘输入适合于按键输入不多的情况(<5个按键),具有占用口线较少、软件编写简单容易等特点。
图2为行列式键盘输入示意图,列线接P1.0~P1.3,行线接P1.4~P1.7。
行列式键盘输入适合于按键输入多的情况,如有16个按键输入,用简单按键输入用要占用2个输入口(共16位),而使用行列式键盘输入只需占用一个输入口(8位)。
但行列式键盘输入软件编写较复杂,对初学者而言有一定的难度。
以上略谈了一下按键输入的情况。
在很多状态下,按键输入的值要同时要在LED数码管上显示出来。
如一个按键设计为输入递增(加法)键,可以设计成每点按一下,数值递增加1,同时在LED数码管上显示出来;也可设计成持续按下时,数值以一定时间间隔(如0.3秒)累加。
但是当欲输入值较大时(如三位LED数码管作输入显示时的输入值最大为999),则可能按下键的时间太长(最长达300秒),看来这种方式只适用于一位或至多两位数值(最大99)的输入。
当然你也可多设几个键,每个键只负责一位数值的输入,但这样会占用较多的口线,浪费宝贵的硬件资源。
大家可能见到过,一些进口的温度控制器(如日本RKC INSTRUMENT INC. 生产的REX_C700温控器)的面板设计为:温度测量值用4位LED数码管显示,输入设定值显示也用4位LED数码管,输入按键只有4个,一个为“模式设定键”,一个为“左移键”,另两个为“加法键”、“减法键”。
欲输入设定值(温控值)时,按一下“模式设定键”,程序进入设定状态,此时输入设定值显示的4位LED数码管中,个位显示最亮(稳定显示),而十、百、千位显示较暗(有闪烁感),说明可对个位进行输入。
按下“加法键”或“减法键”,即可输入个位数的值;点按一下“左移键”,变为十位显示最亮,而个、百、千位显示较暗,说明可对十位进行输入。
按下“加法键”或“减法键”,即可输入十位数的值;……这样可完成4位数的输入。
完成输入后,再按一下“模式设定键”,程序即退出设定状态,进入工作运行。
用这种输入方法,不仅输入4位数用4个键即可,再多位(5位至24位)的输入也用这4个键就够了。
大家了解了这种新颖的按键输入方式后,一定很感兴趣,也想掌握设计方法。
为了便于大家理解,这里结合笔者设计的一款“节能时控器”,详细进行讲解。
“节能时控器”用于定时控制大功率电器工作,因现采用分时计费方法,可起到节约开支的作用,对工业生产成效显著。
图3为“节能时控器”硬件构成原理图。
“节能时控器”共有4个输入按键:set--模式设定键,left--左移键,up—加法键,on/off--定时1、2启动/关闭键。
单片机IC1(AT89C2051)只有15条I/O线,由于受I/O线数量限制,因此P1口中的P1.0~P1.3既作为驱动4位LED数码管的数据输出一部分,同时也用作按键的输入。
无疑,这种方式大大节约了硬件的I/O 线,但也给编程者提出了更高的技术要求。
限于篇幅,我们只对要详解的按键输入程序进行分析,其它部分只略作介绍。
如读者需“节能时控器”详细的源程序,可以Email:xuyuandz@与作者联系。
图4为主程序状态流程图。
可见主程序只负责进行走时或调整时间的运算及显示,而判断按键输入则放在T1定时中断(10mS)服务子程序中。
T0作为走时的基准被设置为100mS 定时中断。
这种设计的优点是大大简化了主程序设计,并且CPU会定时关心键盘,只要定时中断时间足够短(如为几十mS),就不会漏掉每一次的按键输入。
下面为判断按键输入的T1定时中断服务子程序,序号为解释方便而加。
/*10mS定时中断服务子函数*/序号 1:void zd1(void) interrupt 32:{3:uchar i,j;i=P1;j=P3;4:TH1=-(5000/256);5:TL1=-(5000%256);6:if(m==1)n++;7:if(n>=30){n=0;m=0;}8:P3_7=0;9:P1=0xff;10:if(P1!=0xff)11:{12:if(n==0)m=1;13:{if(n==1)14:{15:if(P1_0==0){set++;left=0;}16:if(set>=4)set=0;17:if(set==1)flag=0x55;18:if(P1_1==0)left++;19:if(left>=4)left=0;20:if(P1_2==0){up++;21:switch(left)22:{23:case 0:{if(up>=10)up=0;}break; 24:case 1:{if(up>=6)up=0;}break; 25:case 2:{if(up>=10)up=0;}break; 26:case 3:{if(up>=3)up=0;}break; 27:default:break;28:}29:}30:if(P1_2==0){31:switch(set)32:{case 0:break;33:case 1:x[left]=up;break;34:case2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break; 35:case3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break; 36:default:break;37:} }38:else {39:switch(set)40:{case 0:break;41:case 1:up=x[left];break;42:case2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break; 43:case3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break; 44:default:break;}45 :}}46:}}47:P1=i;P3=j;48:}序号1(程序解释,以下同):声明定时1中断函数。
序号2:定时1中断函数开始。
序号3:定义i、j为无符号字符型局部变量。
将当时的P1口、P3口状态送i、j暂存。
序号4、5:定时器T1重新载入10mS初值。
序号6:如变量m等于1,则变量n递增。
说明:m、n为整个程序开始时定义的无符号字符型全局变量。
序号7:如变量n大于等于30,则m、n清零。
序号8:P3.7置0,准备读取按键输入。
序号9:P1口置全1,准备读取按键输入。
序号10:如果P1口不等于全1,说明4个按键中有键按下。
序号11:进入if(P1!=0xff)语句范围。
序号12:如果n等于0,进入if(n==0)语句,m置1。
序号13:如果n等于1,进入if(n==1)语句,同时进行下面的具体判断按键语句。
作用效果为:开始时m、n均赋0,一旦有键按下,第一次中断产生时m赋1;第二次中断产生时n递增。
当n等于1时(第二次中断产生)进入下面的具体判断按键语句。
若持续按下键,则第三次中断产生~第三十一次中断产生时,程序不进入具体的判断按键语句过程(因这时n不等于1)。
由于中断每10mS产生一次,这样可实现每0.31秒(31x10=0.31秒)进行一次加法或移位的操作,与人眼的视觉特性相吻合。
序号14:进入具体判断按键语句范围。
序号15:如果P1.0等于0(即电路中的set键按下),变量set递增,变量left清0。
说明:set、left是为了判断模式设定及左移而在整个程序开始时定义的无符号字符型全局变量。
序号16:如果set大于等于4,则set清0。
说明:set 值只能在0~3间变化,只有4种工作模式(走时及输出控制模式、走时调整模式、定时1调整模式、定时2调整模式)。
序号17:在set等于1时,向RAM区标志变量flag写入55H。
说明:flag是在整个程序开始时定义的无符号字符型全局变量,用作判断RAM区是否受干扰的依据。
序号18:如果P1.1等于0(即电路中的left键按下),变量left递增。
序号19:如果left大于等于4,则left清0。
说明:left 值只能在0~3间变化,LED数码管只有4位显示。
序号20:如果P1.2等于0(即电路中的up键按下),进入if(P1_2==0)语句,变量up递增。
说明:up是为了判断数值增量而在整个程序开始时定义的无符号字符型全局变量。
序号21:随即进入switch(left)开关语句。
序号22:switch(left)开关语句开始。
序号23:left值为0时,如果up大于等于10,则up清0。
随即退出。
说明:电子钟的个位可在0~9之间调整。
序号24:left值为1时,如果up大于等于6,则up清0。
随即退出。
说明:电子钟的十位可在0~5之间调整。
序号25:left值为2时,如果up大于等于10,则up清0。
随即退出。
说明:电子钟的百位可在0~9之间调整。
序号26:left值为3时,如果up大于等于3,则up清0。
随即退出。
说明:电子钟的千位可在0~2之间调整。
序号27:若left为其它值,也退出。
序号28:switch(left)开关语句结束。
序号29:if(P1_2==0)语句结束。
序号30:如果P1.2等于0(即电路中的up键按下时),进入if(P1_2==0)语句,同时进入switch(set)开关语句。
序号31:switch(set)开关语句开始。
序号32:set值为0时,退出。
序号33:set值为1时,将此时up值送入X数组的第left 位。
随即退出。
说明:X数组是显示走时缓存区。
序号34:set值为2时,将此时up值送入Y数组的第left 位。
若此时P1.3等于0(即电路中的on/off键按下),则定时1启停标志位o_f1取反(启动/关闭)。
随即退出。
说明:Y数组是定时1记忆缓存区。
o_f1是为了判断定时1启动/关闭而在整个程序开始时定义的位标志。
序号35:set值为3时,将此时up值送入Z数组的第left 位。
若此时P1.3等于0(即电路中的on/off键按下),则定时2启停标志位o_f2取反(启动/关闭)。
随即退出。
说明:Z 数组是定时2记忆缓存区。
o_f2是为了判断定时2启动/关闭而在整个程序开始时定义的位标志。
序号36:若set为其它值,也退出。
序号37:switch(set)开关语句结束。
if(P1_2==0)语句结束。
序号38:else语句开始。
序号39:又进入switch(set)开关语句。
说明:上一个switch(set)开关语句是将按键产生的up值送入X、Y、Z数组存放,现在这个switch(set)开关语句是调出X、Y、Z数组内容至变量up,以便在原来的基础上递增。