c语言子程序的写法,子函数main函数写哪,还用写吗

c语言子程序的写法,子函数main函数写哪,还用写吗,第1张

1、子程序不用写main函数

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

程序参考网上的资源,在此谢谢这些无私奉献的朋友!!!

******************************************************************/

/* 实验目的:1.掌握键盘扫描的原理以及十/十六进制的转换

* 2.了解单片机输入和输出的过程,以及如何对数据进行采集的

* 实验内容:键盘上对应有16个按键,从0到F,按下相应的键会在数码管上显示相应的数字,

* 其中K0到K15是采用4*4的方式连接的

*/

******************************************************************

0 1 2 3 ---P20

4 5 6 7 ---P21

8 9 A B ---P22

C D E F ---P23

| | | |

P24 P25 P26 P27

******************************************************************

ORG 0000h

LJMP MAIN

ORG 0030h

MAIN:

MOV DPTR,#TAB 将表头放入DPTR

LCALL KEY 调用键盘扫描程序

MOVC A,@A+DPTR 查表后将键值送入ACC

MOV P0,A将Acc值送入P0口

CLR P1.3开显示

LJMP MAIN返回调用子程序反复循环显示

KEY: LCALL KS 调用检测按键子程序

JNZ K1 有键按下继续

LCALL DELAY2 无键按下调用延时去抖动程序

AJMP KEY 返回继续检测有无按键按下

K1: LCALL DELAY2

LCALL DELAY2 有键按下继续延时去抖动

LCALL KS 再一次调用检测按键程序

JNZ K2 确认有按下进行下一步

AJMP KEY 无键按下返回继续检测

K2: MOV R2,#0EFH将扫描值送入 R2暂存

MOV R4,#00H将第一列的列值00H送入R4暂存,R4用于存放列值。

K3: MOV P2,R2 将R2的值送入P2口

L6: JB P2.0,L1 P2.0等于1跳转到L1

MOV A,#00H 将第一行的行值00H送入ACC

AJMP LK跳转到键值处理程序

L1: JB P2.1,L2 P2.1等于1跳转到L2

MOV A,#04H 将第二行的行值送入ACC

AJMP LK跳转到键值理程序进行键值处理

L2: JB P2.2,L3 P1.2等于1跳转到L3

MOV A,#08H 将第三行的行值送入ACC

AJMP LK跳转到键值处理程序

L3: JB P2.3,NEXTP2.3等于1跳转到NEXT处

MOV A,#0cH 将第四行的行值送入ACC

LK: ADD A,R4行值与列值相加后的键值送入A

PUSH ACC 将A中的值送入堆栈暂存

K4: LCALL DELAY2 调用延时去抖动程序

LCALL KS 调用按键检测程序

JNZ K4 按键没有松开继续返回检测

POP ACC将堆栈的值送入ACC

RET

NEXT:

INC R4 将列值加一

MOV A,R2将R2的值送入A

JNB ACC.7,KEY 扫描完成跳至KEY处进行下一回合的扫描

RL A扫描未完成将A中的值右移一位进行下一列的扫描

MOV R2,A将ACC的值送入R2暂存

AJMP K3 跳转到K3继续

KS: MOV P2,#0FH 将P2口高四位置0低四位值1

MOV A,P2 读P2口

XRL A,#0FH 将A中的值与A中的值相异或

RET子程序返回

DELAY2: 40ms延时去抖动子程序8*FA*2=40ms

MOV R5,#08H

L7: MOV R6,#0FAH

L8: DJNZ R6,L8

DJNZ R5,L7

RET

TAB:

DB0C0H0

DB0F9H1

DB0A4H2

DB0B0H3

DB099H4

DB092H5

DB082H6

DB0F8H7

DB080H8

DB090H9

DB088HA

DB083Hb

DB0C6HC

DB0A1Hd

DB086HE

DB08EHF

END

例:

#include<stdio.h>

intsushu(intx)

{inti

for(i=2i<xi++)

if(x%i==0)break

if(i==x)return1

elsereturn0

}

main()

{inti,n=0

for(i=2i<=1000i++)

if(sushu(i)==1)n++:

printf("n=%d",n)

}

扩展资料

使用vfork()新建子进程,然后调用exec函数族

#include<unistd.h>

main()

{

char*argv[]={“ls”,”-al”,”/etc/passwd”,(char*)}

if(vfork()==0)

{

execv(“/bin/ls”,argv)

}else{

printf(“Thisistheparentprocess\n”)

}

}


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

原文地址: http://outofmemory.cn/yw/11243753.html

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

发表评论

登录后才能评论

评论列表(0条)

保存