
请51单片机C编程高手解答,帮忙做一下注释,个人初学单片机,不是很懂。
主要是头文件、主函数及AD转换部分不是很懂unsignedcharm=0,s=0,tt=0;bitUA0=1,DA0=1,UD0=1,DD0=1;unsignedchar...
主要是头文件、主函数及AD转换部分不是很懂
unsigned char m=0,s=0,tt=0;
bit UA0=1,DA0=1,UD0=1,DD0=1;
unsigned char lcdnumber[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
sbit busy=P1^0;
sbit REQ=P1^1;
sbit EOC=P1^3;
sbit UA=P1^7;
sbit UD=P1^6;
sbit DA=P1^4;
sbit DD=P1^5;
void displaytime(void);
void checkkey(void);
void checklimit(void);
void displaylimit(void);
unsigned char AD(void);
void readdata();
void displaytem(void);
void displayresult(void);
void upwarn(void);
void downwarn(void);
void normal(void);
void main()
{
TMOD=0x01;
TL0=0xB0;
TH0=0x3C;
ET0=1;
EA=1;
TR0=1;
control=0x80;
REQ=0;
while(busy==1);
PA=0xf4;
REQ=1;
while(busy==0);
REQ=0;
while(1)
{
displaytime();
checkkey();
readdata();
displaytem();
displayresult();
}
}
AD转换及滤波程序段:
unsigned char AD(void)
{
unsigned char AD_result;
AD0809=0;
while(!EOC);
AD_result=AD0809;
return AD_result;
}
void readdata()
{
unsigned int i;
long tem=0;
for(i=0;i<10;i++)
tem+=AD();
tem=tem*10;
temperature=(tem/10)*100/255;
} 展开
unsigned char m=0,s=0,tt=0;
bit UA0=1,DA0=1,UD0=1,DD0=1;
unsigned char lcdnumber[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
sbit busy=P1^0;
sbit REQ=P1^1;
sbit EOC=P1^3;
sbit UA=P1^7;
sbit UD=P1^6;
sbit DA=P1^4;
sbit DD=P1^5;
void displaytime(void);
void checkkey(void);
void checklimit(void);
void displaylimit(void);
unsigned char AD(void);
void readdata();
void displaytem(void);
void displayresult(void);
void upwarn(void);
void downwarn(void);
void normal(void);
void main()
{
TMOD=0x01;
TL0=0xB0;
TH0=0x3C;
ET0=1;
EA=1;
TR0=1;
control=0x80;
REQ=0;
while(busy==1);
PA=0xf4;
REQ=1;
while(busy==0);
REQ=0;
while(1)
{
displaytime();
checkkey();
readdata();
displaytem();
displayresult();
}
}
AD转换及滤波程序段:
unsigned char AD(void)
{
unsigned char AD_result;
AD0809=0;
while(!EOC);
AD_result=AD0809;
return AD_result;
}
void readdata()
{
unsigned int i;
long tem=0;
for(i=0;i<10;i++)
tem+=AD();
tem=tem*10;
temperature=(tem/10)*100/255;
} 展开
展开全部
我来简单解释一下吧,这是个典型的单片机程序实例。头文件是定义,包括所用到的按键、显示、A/D接口的各I/O口的定义,函数定义等。void main()是主函数,包括单片机内部寄存器的初始化,各状态标志的定义,while(1)这是监控程序,简单的说就是一个死循环,里面有显示函数、键盘监视函数等。后面的A/D转换函数和数据读取函数,不过while(1)中的一些函数没有写完整,因此不好确定你这个程序是怎么进行A/D转换的,猜测应该是当有按键按下的时候就会启动(调用)A/D程序。
就说这么多吧,还有不懂得还可以再交流!
就说这么多吧,还有不懂得还可以再交流!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2024-10-23 广告
深圳思驰科技是国内先进入芯片解密领域的公司,拥有数十年的丰富经验,成功帮助国内外企业、政府及知名科研机构攻克多个技术难题。在医疗电子、工控设备、军事航天、通信设备、广电设备、交通设备、汽车电子、家用电子等行业都成功推出了多款创新产品,熟悉这...
点击进入详情页
本回答由深圳思驰科技有限公司_提供
展开全部
//***变量,为数据提供住处**************************************************************************/
unsigned char m=0,s=0,tt=0;
bit UA0=1,DA0=1,UD0=1,DD0=1;
unsigned char lcdnumber[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//*****SBIT变量用于定义常数,就像给人起别名或绰号********************************************/
sbit busy=P1^0;
sbit REQ=P1^1;
sbit EOC=P1^3;
sbit UA=P1^7;
sbit UD=P1^6;
sbit DA=P1^4;
sbit DD=P1^5;
//*****声明程序用到的函数,类似书的目录*********************************************/
void displaytime(void);
void checkkey(void);
void checklimit(void);
void displaylimit(void);
unsigned char AD(void);
void readdata();
void displaytem(void);
void displayresult(void);
void upwarn(void);
void downwarn(void);
void normal(void);
//*******主程序,大门,一切从这里开始******************************************************************/
void main()
{
TMOD=0x01; //中断配置
TL0=0xB0;//计时器0低8位,与TH0一起设置计时器初始值
TH0=0x3C;//高8位
ET0=1;//计时器0中断允许
EA=1;//打开中断总开关,允许中断
TR0=1;//启动,计时器0开始工作
control=0x80;//control或0x80,逐位进行或比较,两个数的相同位只要一个为1,新数该位为1
REQ=0;//P1^1置低电平
while(busy==1);//判断busy,等待检测P1_1脚不为1,
PA=0xf4;
REQ=1;
while(busy==0);//判断busy,等待检测P1_1脚不为0,
REQ=0;
while(1)//死循环;这里开始循环
{
displaytime();
checkkey();
readdata();
displaytem();
displayresult();
}//返回循环开始处
}//结束主程序
AD转换及滤波程序段:
//子程序定义,就像书的每一章节实际内容
unsigned char AD(void)
{
unsigned char AD_result;
AD0809=0;
while(!EOC);//等待AD0809 EOC脚拉低
AD_result=AD0809;
return AD_result;
}
void readdata()
{
unsigned int i;
long tem=0;
for(i=0;i<10;i++)
tem+=AD();
tem=tem*10;
temperature=(tem/10)*100/255;
}
好多年没有用AD0809了
unsigned char m=0,s=0,tt=0;
bit UA0=1,DA0=1,UD0=1,DD0=1;
unsigned char lcdnumber[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//*****SBIT变量用于定义常数,就像给人起别名或绰号********************************************/
sbit busy=P1^0;
sbit REQ=P1^1;
sbit EOC=P1^3;
sbit UA=P1^7;
sbit UD=P1^6;
sbit DA=P1^4;
sbit DD=P1^5;
//*****声明程序用到的函数,类似书的目录*********************************************/
void displaytime(void);
void checkkey(void);
void checklimit(void);
void displaylimit(void);
unsigned char AD(void);
void readdata();
void displaytem(void);
void displayresult(void);
void upwarn(void);
void downwarn(void);
void normal(void);
//*******主程序,大门,一切从这里开始******************************************************************/
void main()
{
TMOD=0x01; //中断配置
TL0=0xB0;//计时器0低8位,与TH0一起设置计时器初始值
TH0=0x3C;//高8位
ET0=1;//计时器0中断允许
EA=1;//打开中断总开关,允许中断
TR0=1;//启动,计时器0开始工作
control=0x80;//control或0x80,逐位进行或比较,两个数的相同位只要一个为1,新数该位为1
REQ=0;//P1^1置低电平
while(busy==1);//判断busy,等待检测P1_1脚不为1,
PA=0xf4;
REQ=1;
while(busy==0);//判断busy,等待检测P1_1脚不为0,
REQ=0;
while(1)//死循环;这里开始循环
{
displaytime();
checkkey();
readdata();
displaytem();
displayresult();
}//返回循环开始处
}//结束主程序
AD转换及滤波程序段:
//子程序定义,就像书的每一章节实际内容
unsigned char AD(void)
{
unsigned char AD_result;
AD0809=0;
while(!EOC);//等待AD0809 EOC脚拉低
AD_result=AD0809;
return AD_result;
}
void readdata()
{
unsigned int i;
long tem=0;
for(i=0;i<10;i++)
tem+=AD();
tem=tem*10;
temperature=(tem/10)*100/255;
}
好多年没有用AD0809了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
您好:
建议您对照一下硬件电路和ad转换芯片的时序看吧
建议您对照一下硬件电路和ad转换芯片的时序看吧
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询