从单片机基础到程序框架(全集 2019pdf版) - 第44页
第十一节:一个在单片机上练习 C 语言的模板程序。 【11.1 一套完整的模板源代码。 】 先给 大家附 上一 套完 整的模 板源 代码 ,后面 章节 练习 C 语 言的 模板程 序就 直接复 制此 完整 的源代 码 ,此 源代码适 合的单片机型 号是 STC89 C52RC,晶振是 1 1.0592M Hz,串口波 特率是 9600,初 学者只需修 改代码 里 从“C 语 言学习 区域 的开 始”到 “C 语言学习 区域 的结 束”的…

源代码如下:
#include "REG52.H" //进入主程序前的区域:头文件包含
sbit beep_dr=P3^4; //进入主程序前的区域:宏定义
sbit led_dr=P1^6; //进入主程序前的区域:宏定义
unsigned long i; //进入主程序前的区域:内存分配
void main() //主程序入口,即将进入初始化区域
{
beep_dr=0; //第一步:初始化区域:蜂鸣器开始鸣叫。
for(i=0;i<6250;i++); //第二步:初始化区域:延时 0.5 秒左右。也就是蜂鸣器鸣叫的持续时间。
beep_dr=1; //第三步:初始化区域:蜂鸣器停止鸣叫。
while(1) //执行完上面的初始化区域,即将进入循环区域
{
led_dr=0; //第四步:循环区域:LED 开始点亮。
for(i=0;i<6250;i++); //第五步:循环区域:延时 0.5 秒左右。也就是 LED 点亮的持续时间。
led_dr=1; //第六步:循环区域:LED 开始熄灭。
for(i=0;i<6250;i++); //第七步:循环区域:延时 0.5 秒左右。也就是 LED 熄灭的持续时间。
} //执行完上面第七步后,单片机又马上返回到上面第四步继续往下执行。
}
上述代码执行顺序分析:
单片机进入主程序后,从第一步到第三步是属于初始化区域,只被执行一次。然后进入循环区域,从第
四步执行到第七步,执行完第七步之后,马上又返回上面第四步继续循环往下执行,单片机一直处于第四步
到第七步的往复循环中。可以很清晰的看到,上面的 main 和 while(1)关键词就是三个区域的边界分割线。
经过以上的分析,可以看出这三个区域的大概分布如下:
//...进入主程序前的区域
void main()
{
//...初始化区域
while(1)
{
//...循环区域
}
}

第十一节:一个在单片机上练习
C
语言的模板程序。
【11.1 一套完整的模板源代码。】
先给大家附上一套完整的模板源代码,后面章节练习 C 语言的模板程序就直接复制此完整的源代码,此
源代码适合的单片机型号是 STC89C52RC,晶振是 11.0592MHz,串口波特率是 9600,初学者只需修改代码里
从“C 语言学习区域的开始”到“C 语言学习区域的结束”的区域,其它部分不要更改。可复制的源代码请
到网上论坛原贴处直接下载本教程的文件压缩包,解压文件压缩包后,直接用 WPS 办公软件打开“可编辑的
WPS 文档教程”这个文档,就可以复制里面相关章节的源代码。在网上搜索“从单片机基础到程序框架”就
可以找到论坛原贴的出处,也可以直接到我的个人网站那里下载(www.dumenmen.com)。一套完整的模板源
代码如下:
#include "REG52.H"
void View(unsigned long u32ViewData);
void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type);
void SendString(unsigned char *pu8String);
/*---C 语言学习区域的开始。-----------------------------------------------*/
void main() //主函数
{
unsigned char a; //定义一个变量 a。
unsigned int b; //定义一个变量 b。
unsigned long c; //定义一个变量 c。
a=100; //给变量 a 赋值。
b=10000; //给变量 b 赋值。
c=1000000000; //给变量 c 赋值。
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
void View(unsigned long u32ViewData)
{
static unsigned char Su8ViewBuffer[43];
code unsigned char Cu8_0D_0A[]={0x0d,0x0a,0x00};
code unsigned char Cu8Start[]={"开始..."};
static unsigned char Su8FirstFlag=0;
static unsigned int Su16FirstDelay;

if(0==Su8FirstFlag)
{
Su8FirstFlag=1;
for(Su16FirstDelay=0;Su16FirstDelay<10000;Su16FirstDelay++);
SendString(Cu8Start);
SendString(Cu8_0D_0A);
SendString(Cu8_0D_0A);
}
to_BufferData(u32ViewData,Su8ViewBuffer,1);
SendString(Su8ViewBuffer);
to_BufferData(u32ViewData,Su8ViewBuffer,2);
SendString(Su8ViewBuffer);
to_BufferData(u32ViewData,Su8ViewBuffer,3);
SendString(Su8ViewBuffer);
to_BufferData(u32ViewData,Su8ViewBuffer,4);
SendString(Su8ViewBuffer);
SendString(Cu8_0D_0A);
}
void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type)
{
code unsigned char Cu8Array1[]={0xB5,0xDA,0x4E,0xB8,0xF6,0xCA,0xFD,0x00};
code unsigned char Cu8Array2[]="十进制:";
code unsigned char Cu8Array3[]="十六进制:";
code unsigned char Cu8Array4[]="二进制:";
static unsigned char Su8SerialNumber=1;
static unsigned int Su16BufferCnt;
static unsigned int Su16TempCnt;
static unsigned int Su16TempSet;
static unsigned long Su32Temp1;
static unsigned long Su32Temp2;
static unsigned long Su32Temp3;
static unsigned char Su8ViewFlag;
if(1==u8Type)
{
for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++)
{
pu8Buffer[Su16BufferCnt]=Cu8Array1[Su16BufferCnt];
}
pu8Buffer[2]=Su8SerialNumber+'0';
pu8Buffer[Su16BufferCnt]=0x0d;
pu8Buffer[Su16BufferCnt+1]=0x0a;
pu8Buffer[Su16BufferCnt+2]=0;
Su8SerialNumber++;
return;