控制系统各部件的初始化和实现各功能子程序的调用。根据道客巴巴官网查询。单片机程序不是从零开始,而是先对已有的相关程序进行阅读分析。分析程序是设计、修改、优化、维护的重要步骤。因此,掌握单片机程序的分析方法是非常必要的。头文件,变量声明,函数声明,子函数,主函数这几部分组成,头文件其实就是一种声明,将单片机中的一些常用的符号变量进行定义声明,对一些特殊功能寄存器进行声明,对一些关健字进行定义,比如我们常用的P0口,在写程序的时候你就不用在去定义这个符号,不用把它的字节地址给这个符号了。
C语言只有一个入口函数 一般情况下是 main函数,程序是从 main 函数的第一行开始执行的,其他的都是子函数,main函数是由编译器提供的启动初始化库调用的,其他子函数是由main函数直接或者间接调用的。
还有一种比较特殊的函数, T0_TNT() 你可能注意到 后边的 interrupt 1, 这个函数是中断处理函数,顾名思义,这个函数可以打断其他函数的执行,等待自己执行完成之后再去执行被中断的函数。这类函数不会被 main 函数直接或者间接调用。一般是交给系统,满足特定条件才会触发的(你要配置启用中断功能)。
程序就不逐句讲解了,看起来没有什么难度,除了几个 *** 作寄存器的语句,大多数都是 C 语言的基础语句,还是自己分析一下收获才会更多。
51内核的单片机,找对应的 芯片参考手册 边查边看,一共就二十来个寄存器,看多了就熟了。
画主程序流程图,看懂主函数的程序,按照main()函数中的具体书写过程来画,例如:程序开始、定义变量、初始化变量、使用选择或者循环或者顺序结构、调用某一个子函数、(可以没有)程序结束。
计数count=0 char c=要统计的字符
循环遍历字符串数组的每一位
if(当前遍历到的字符==c)
{
count++;
}
//执行下次循环
else
{
cotinue;
}
没有工具不好画图 这个自己画一下把 很好画的
你好!
Keil5本身并不提供直接生成流程图的功能,但可以使用一些工具来生成流程图。
下面介绍一些生成Keil5程序流程图和子程序流程图的方法:
使用Doxygen工具
Doxygen是一种自动化文档生成工具,它可以自动分析源代码并生成各种文档,包括流程图。在Keil5中,可以将程序文件导出为一个文件夹,然后使用Doxygen对该文件夹进行分析,生成程序流程图和子程序流程图。具体使用方法可以参考Doxygen的官方文档。
使用GraphViz工具
GraphViz是一种开源的图形可视化工具,它可以生成各种流程图、状态图等。在Keil5中,可以将程序文件导出为一个dot文件,然后使用GraphViz将该文件转换成流程图。具体使用方法可以参考GraphViz的官方文档。
使用Cscope工具
Cscope是一种代码浏览器,它可以方便地查找函数、变量、宏等。在Keil5中,可以使用Cscope查找程序中的函数和调用关系,然后手动绘制流程图和子程序流程图。
另一个函数就用方框表示,里面写上函数功能描述,在主流程走到调用的地方用箭头指向这个方框。然后根据函数的返回值,再分出多个箭头指向下一个流程(比如函数返回1执行下一步,返回0执行异常处理。那么就分两个箭头分别标注1和0,然后分别指向下一个流程和异常处理的函数)。
#include <stdioh>
#include<stdlibh>
int max(int a[], int n)
{
int tmp = a[0];
for (int i = 0; i!=n; ++i)
if (tmp < a[i])
tmp = a[i];
return tmp;
}
int min(int a[], int n)
{
int tmp = a[0];
for (int i = 0; i!=n; ++i)
if (tmp > a[i])
tmp = a[i];
return tmp;
}
int main()
{
int num = 0, len=0;
printf("请输入数的个数:");
scanf("%d",&len);
num = (int )malloc(sizeof(int)len);
printf("请输入所有的数:");
for (int i = 0; i!=len; ++i)
scanf("%d",&num[i]);
printf("最大值为%d\n",max(num, len));
printf("最小值为%d\n",min(num, len));
return 0;
}
扩展资料
写两个函数,分别求两个整数的最大公约数和最小公倍数。用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
请输入45 ,25验证结果
#include<stdioh>
int max(intx,int y);
int min(intx,int y);
int main()
{
inta,b,imax,imin,t;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
if(a<b)
{
t=a;
a=b;
b=t;
}
imax=max(a,b);
imin=min(a,b);
printf("最大公约数为:%d,最小公倍数为:%d",imax,imin);
return 0;
}
int max(intx,int y)
{
intm,k,p;
k=x;
p=y;
while(y!=0)
{
m=x%y;
x=y;
y=m;
}
return x;
}
int min(intx,int y)
{
int max(intx,int y);
int w;
w=max(x,y);
return ((xy)/w);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)