从单片机基础到程序框架(全集 2019pdf版).pdf - 第45页

if(0==Su 8FirstFlag) { Su8FirstFl ag=1; for(Su16Fi rstDelay= 0;Su16FirstD elay<1000 0;Su16FirstD elay++); SendString (Cu8Start ); SendString (Cu8_0D_0 A); SendString (Cu8_0D_0 A); } to_Buffe rData(u32Vi ewData,Su8 Vie…

100%1 / 836
第十一节:一个在单片机上练习
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;
}
else if(2==u8Type)
{
for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++)
{
pu8Buffer[Su16BufferCnt]=Cu8Array2[Su16BufferCnt];
}
Su32Temp1=1000000000;
Su32Temp2=10;
Su16TempSet=10;
}
else if(3==u8Type)
{
for(Su16BufferCnt=0;Su16BufferCnt<9;Su16BufferCnt++)
{
pu8Buffer[Su16BufferCnt]=Cu8Array3[Su16BufferCnt];
}
Su32Temp1=0x10000000;
Su32Temp2=0x00000010;
Su16TempSet=8;
}
else
{
for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++)
{
pu8Buffer[Su16BufferCnt]=Cu8Array4[Su16BufferCnt];
}
Su32Temp1=0x80000000;
Su32Temp2=0x00000002;
Su16TempSet=32;
}
Su8ViewFlag=0;
for(Su16TempCnt=0;Su16TempCnt<Su16TempSet;Su16TempCnt++)
{
Su32Temp3=u32Data/Su32Temp1%Su32Temp2;
if(Su32Temp3<10)
{
pu8Buffer[Su16BufferCnt]=Su32Temp3+'0';
}
else
{
pu8Buffer[Su16BufferCnt]=Su32Temp3-10+'A';
}
if(0==u32Data)