STC12C5A60S2单片机AD程序问题!
#include"stc12c5a.h"//包含STC12C5A60S2单片机寄存器定义文件unsignedchardatage_at_0x30;//四位七段数码管个位数...
#include "stc12c5a.h" //包含STC12C5A60S2单片机寄存器定义文件
unsigned char data ge _at_ 0x30; //四位七段数码管个位数据存放
unsigned char data shi _at_ 0x31; //四位七段数码管十位数据存放
unsigned char data bai _at_ 0x32; //四位七段数码管百位数据存放
unsigned char data qian _at_ 0x33; //四位七段数码管千位数据存放
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //个、十、千位七段数码管数字显示表
unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //百位七段数码管显示表,里面含小数点,即dp段永远被点亮
void main(void)
{
unsigned long i;
unsigned long K;
ge=table[0];
shi=table[0];
bai=table1[0];
qian=table[0];
K=0;
while(1) //七段数码管显示循环
{
P2=0x0E; //选择四位七段数码管的千位
P0=qian; //显示四位七段数码管的千位
for (i=0;i<100;i++);
P2=0x0D; //选择四位七段数码管的百位
P0=bai; //显示四位七段数码管的百位
for (i=0;i<100;i++);
P2=0x0B; //选择四位七段数码管的十位
P0=shi; //显示四位七段数码管的十位
for (i=0;i<100;i++);
P2=0x07; //选择四位七段数码管的个位
P0=ge; //显示四位七段数码管的个位
for (i=0;i<100;i++);
K=P2^5; //按键扫描,为1时进入ADC转化部分
while(K) //AD转化以及数据处理过程
{
unsigned char status;
unsigned int y;
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
unsigned int e;
ADC_CONTR|=0x80; //开A/D转换电源,第一次使用时要打开内部模拟电源
for (i=0;i<10000;i++); //适当延时
P1ASF=0x04; //选择P1.2作为A/D转换通道
ADC_CONTR=0xE2;
for (i=0;i<10000;i++); //适当延时
status=0;
while(status==0)
{
status=ADC_CONTR&0x10;
}
ADC_CONTR&=0xE7; //将ADC_FLAG清零
e= ADC_RES; // 保存AD转化结果
y=2569.002+10.5859375*e; //AD转换后的结果于温度之间的函数关系
a=y%10 ; //四位七段数码管个位数
b=(y%100)/10; //四位七段数码管十位数
c=(y%100)/100; //四位七段数码管百位数
d=y/1000 ; //四位七段数码管千位数
ge=table[a]; //四位七段数码管个位显示数据
shi=table[b]; //四位七段数码管十位显示数据
bai=table1[c]; //四位七段数码管百位显示数据
qian=table[d]; //四位七段数码管千位显示数据
K--; //使循环只做一次
}
}
} 展开
unsigned char data ge _at_ 0x30; //四位七段数码管个位数据存放
unsigned char data shi _at_ 0x31; //四位七段数码管十位数据存放
unsigned char data bai _at_ 0x32; //四位七段数码管百位数据存放
unsigned char data qian _at_ 0x33; //四位七段数码管千位数据存放
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //个、十、千位七段数码管数字显示表
unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //百位七段数码管显示表,里面含小数点,即dp段永远被点亮
void main(void)
{
unsigned long i;
unsigned long K;
ge=table[0];
shi=table[0];
bai=table1[0];
qian=table[0];
K=0;
while(1) //七段数码管显示循环
{
P2=0x0E; //选择四位七段数码管的千位
P0=qian; //显示四位七段数码管的千位
for (i=0;i<100;i++);
P2=0x0D; //选择四位七段数码管的百位
P0=bai; //显示四位七段数码管的百位
for (i=0;i<100;i++);
P2=0x0B; //选择四位七段数码管的十位
P0=shi; //显示四位七段数码管的十位
for (i=0;i<100;i++);
P2=0x07; //选择四位七段数码管的个位
P0=ge; //显示四位七段数码管的个位
for (i=0;i<100;i++);
K=P2^5; //按键扫描,为1时进入ADC转化部分
while(K) //AD转化以及数据处理过程
{
unsigned char status;
unsigned int y;
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
unsigned int e;
ADC_CONTR|=0x80; //开A/D转换电源,第一次使用时要打开内部模拟电源
for (i=0;i<10000;i++); //适当延时
P1ASF=0x04; //选择P1.2作为A/D转换通道
ADC_CONTR=0xE2;
for (i=0;i<10000;i++); //适当延时
status=0;
while(status==0)
{
status=ADC_CONTR&0x10;
}
ADC_CONTR&=0xE7; //将ADC_FLAG清零
e= ADC_RES; // 保存AD转化结果
y=2569.002+10.5859375*e; //AD转换后的结果于温度之间的函数关系
a=y%10 ; //四位七段数码管个位数
b=(y%100)/10; //四位七段数码管十位数
c=(y%100)/100; //四位七段数码管百位数
d=y/1000 ; //四位七段数码管千位数
ge=table[a]; //四位七段数码管个位显示数据
shi=table[b]; //四位七段数码管十位显示数据
bai=table1[c]; //四位七段数码管百位显示数据
qian=table[d]; //四位七段数码管千位显示数据
K--; //使循环只做一次
}
}
} 展开
展开全部
收费单片机指导
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个东西只都没问题的吗。贴出来啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询