c语言怎么编写子程序?

如题所述

第1个回答  2022-11-16
程序参考网上的资源,在此谢谢这些无私奉献的朋友!!!\x0d\x0a ;******************************************************************/\x0d\x0a /* 实验目的:1.掌握键盘扫描的原理以及十/十六进制的转换\x0d\x0a * 2.了解单片机输入和输出的过程,以及如何对数据进行采集的\x0d\x0a * 实验内容:键盘上对应有16个按键,从0到F,按下相应的键会在数码管上显示相应的数字,\x0d\x0a * 其中K0到K15是采用4*4的方式连接的\x0d\x0a */\x0d\x0a ;******************************************************************\x0d\x0a ; 0 1 2 3 ---P20\x0d\x0a ; 4 5 6 7 ---P21\x0d\x0a ; 8 9 A B ---P22\x0d\x0a ; C D E F ---P23\x0d\x0a ; | | | |\x0d\x0a ; P24 P25 P26 P27\x0d\x0a ;******************************************************************\x0d\x0a\x0d\x0aORG 0000h\x0d\x0aLJMP MAIN\x0d\x0aORG 0030h\x0d\x0aMAIN:\x0d\x0aMOV DPTR,#TAB ;将表头放入DPTR\x0d\x0aLCALL KEY ;调用键盘扫描程序\x0d\x0aMOVC A,@A+DPTR ;查表后将键值送入ACC\x0d\x0aMOV P0,A ;将Acc值送入P0口\x0d\x0aCLR P1.3 ;开显示\x0d\x0aLJMP MAIN ;返回调用子程序反复循环显示\x0d\x0a\x0d\x0aKEY: LCALL KS ;调用检测按键子程序\x0d\x0a JNZ K1 ;有键按下继续\x0d\x0a LCALL DELAY2 ;无键按下调用延时去抖动程序\x0d\x0a AJMP KEY ;返回继续检测有无按键按下\x0d\x0aK1: LCALL DELAY2\x0d\x0a LCALL DELAY2 ;有键按下继续延时去抖动\x0d\x0a LCALL KS ;再一次调用检测按键程序\x0d\x0a JNZ K2 ;确认有按下进行下一步\x0d\x0a AJMP KEY ;无键按下返回继续检测\x0d\x0aK2: MOV R2,#0EFH ;将扫描值送入 R2暂存\x0d\x0a MOV R4,#00H ;将第一列的列值00H送入R4暂存,R4用于存放列值。\x0d\x0aK3: MOV P2,R2 ;将R2的值送入P2口\x0d\x0aL6: JB P2.0,L1 ;P2.0等于1跳转到L1\x0d\x0a MOV A,#00H ;将第一行的行值00H送入ACC\x0d\x0a AJMP LK ;跳转到键值处理程序\x0d\x0aL1: JB P2.1,L2 ;P2.1等于1跳转到L2\x0d\x0a MOV A,#04H ;将第二行的行值送入ACC\x0d\x0a AJMP LK ;跳转到键值理程序进行键值处理\x0d\x0aL2: JB P2.2,L3 ;P1.2等于1跳转到L3\x0d\x0a MOV A,#08H ;将第三行的行值送入ACC\x0d\x0a AJMP LK ;跳转到键值处理程序\x0d\x0aL3: JB P2.3,NEXT ;P2.3等于1跳转到NEXT处\x0d\x0a MOV A,#0cH ;将第四行的行值送入ACC\x0d\x0aLK: ADD A,R4 ;行值与列值相加后的键值送入A\x0d\x0a PUSH ACC ;将A中的值送入堆栈暂存\x0d\x0aK4: LCALL DELAY2 ;调用延时去抖动程序\x0d\x0a LCALL KS ;调用按键检测程序\x0d\x0a JNZ K4 ;按键没有松开继续返回检测\x0d\x0a POP ACC ;将堆栈的值送入ACC\x0d\x0a RET\x0d\x0a\x0d\x0aNEXT:\x0d\x0a INC R4 ;将列值加一\x0d\x0a MOV A,R2 ;将R2的值送入A\x0d\x0a JNB ACC.7,KEY ;扫描完成跳至KEY处进行下一回合的扫描\x0d\x0a RL A ;扫描未完成将A中的值右移一位进行下一列的扫描\x0d\x0a MOV R2,A ;将ACC的值送入R2暂存\x0d\x0a AJMP K3 ;跳转到K3继续\x0d\x0aKS: MOV P2,#0FH ;将P2口高四位置0低四位值1\x0d\x0a MOV A,P2 ;读P2口\x0d\x0a XRL A,#0FH ;将A中的值与A中的值相异或\x0d\x0a RET ;子程序返回\x0d\x0aDELAY2: ;40ms延时去抖动子程序8*FA*2=40ms\x0d\x0a MOV R5,#08H\x0d\x0aL7: MOV R6,#0FAH\x0d\x0aL8: DJNZ R6,L8\x0d\x0a DJNZ R5,L7\x0d\x0a RET\x0d\x0a\x0d\x0aTAB:\x0d\x0a DB 0C0H;0\x0d\x0a DB 0F9H;1\x0d\x0a DB 0A4H;2\x0d\x0a DB 0B0H;3\x0d\x0a DB 099H;4\x0d\x0a DB 092H;5\x0d\x0a DB 082H;6\x0d\x0a DB 0F8H;7\x0d\x0a DB 080H;8\x0d\x0a DB 090H;9\x0d\x0a DB 088H;A\x0d\x0a DB 083H;b\x0d\x0a DB 0C6H;C\x0d\x0a DB 0A1H;d\x0d\x0a DB 086H;E\x0d\x0a DB 08EH;F\x0d\x0aEND

c语言子程序是什么?
字母P后所跟的数字就是子程序编号,L后的数据是子程序调用次数,若L没有被指定时,子程序仅执行一次。例:M98 P05……… 执行05子程序一次。M98 P05 L8……执行05子程序八次。在主程序里,子程序的调用与执行顺序如下:3.子程序的位置 在编写加工程序时,如需要用子程序调用功能,则子程序一般写...

c语言怎么编写子程序?
调用检测按键子程序\\x0d\\x0a JNZ K1 ;有键按下继续\\x0d\\x0a LCALL DELAY2 ;无键按下调用延时去抖动程序\\x0d\\x0a AJMP KEY ;返回继续检测有无按键按下\\x0d\\x0aK1: LCALL DELAY2\\x0d\\x0a LCALL DELAY2 ;有键按下继续延时去抖动\\x0d\\x0a LCALL ...

c语言怎么编写子程序?
C语言 函数定义 出现在 main() 函数 以后的,则要在 main() 函数 以前 加写 函数原型声明。例如:计算10个数的平均值,最大值,最小值子程序:include<stdio.h> include<stdlib.h> void f(int n, int *a, int *a_max, int *a_min, float *a_mean);\/\/ 函数原型声明 void main(){...

c语言子程序的写法,子函数main函数写哪,还用写吗
1、子程序不用写main函数。2、每个程序只有一个main函数。(如果在类里看到了main函数那个不是通常意义上的main函数。只是一个名字叫做main的自定函数)。main函数会接受系统传入的参数。参数是固定的。(但是类里如果见到main函数,肯定是自己定义的参数)。

C语言中如何调用子程序
例:include<stdio.h> intsushu(intx){inti;for(i=2;i<x;i++)if(x%i==0)break;if(i==x)return1;elsereturn0;} main(){inti,n=0;for(i=2;i<=1000;i++)if(sushu(i)==1)n++:printf("n=%d",n);}

C语言怎么无限循环子程序?
include <stdlib.h>int main(void){ while(!kbhit())\/\/kbhit:检测输入缓冲区是否有数据,有返回非零值,无返回0. { ... } getchar();\/\/kbhit只是检测,但不吸收这个任意键.若程序后面还有要输入的地方,这里必须写一个getchar(不能是getch) return 0;} ...

C语言子程序的定义和调用
1、在C\/C++中,没有子程序的说法,而叫做函数。函数可以有返回值,不需要时,可定义为void类型。函数的使用与子程序的用法相同,没有什么特殊之处。2、例如 ...int max(int a, int b) { \/* 返回a和b的最大值 *\/ return (a > b) ? a : b;} ......

c语言的子程序有过程和函数两种
C语言源程序是由函数组成的。函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。C语言不仅提供了极为丰富的库函数(如TurboC,MSC都提供了三百多个库函数),还允许用户建立自己定义的函数。用户可把自己的算法编成一个个相对独立的函数模块,然后用...

用C语言编写1ms延迟子程序,不明白for (j=0;j<120;j++),求助大大们_百度...
{ int i,j;for (i=0;i<x;i++) \/\/计数x次,延迟x 1ms for (j=0;j<120;j++); \/\/计数120次,延迟1ms } 这是一个for循环嵌套,每执行一次第一个for语句,那么第二个for语句要执行120次 for (j=0;j<120;j++); 就是没执行一次第一个for循环,就令 j =0,再判断是否 j ...

c语言的子程序有过程和函数两种
是的,C语言的子程序有两种,分别是过程(procedures)和函数(functions)。过程是一组具有特定功能的语句,可以接受输入参数并返回一个值。函数是一组具有特定功能的语句,不接受输入参数,但可以返回一个值。过程和函数在C语言中都是可重用的代码块,可以多次调用并执行。它们在程序中扮演着重要的角色,...

相似回答
大家正在搜