C51大作业 数据采集系统.docx
- 文档编号:27936394
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:20
- 大小:365.03KB
C51大作业 数据采集系统.docx
《C51大作业 数据采集系统.docx》由会员分享,可在线阅读,更多相关《C51大作业 数据采集系统.docx(20页珍藏版)》请在冰豆网上搜索。
C51大作业数据采集系统
《C51程序设计》大作业
设计题目:
数据采集系统
班级:
学号:
姓名:
成绩:
2011年11月
1设计任务
利用C8051F系列单片机设计一个多路信号采集系统。
要求:
(1)能实现8路模拟信号(电压)的间隔性显示;
(2)8路显示的信号范围:
两路为0-1V;两路为0-5V;两路为0-15V;两路为0-30V;
(3)按键选择显示单独一路的信号(电压值);
2硬件分析
利用C8051F410单片机作为控制核心。
C8051F410器件是完全集成的低功耗混合信号片上系统型MCU。
下面列出一些主要特性:
高速、流水线结构的8051兼容的微控制器核(可达50MIPS),全速、非侵入式的在系统调试接口(片内),真12位200ksps的24通道ADC,带模拟多路器,两个12位电流输出DAC,高精度可编程的24.5MHz内部振荡器,达32KB的片内FLASH存储器,2304字节片内RAM,硬件实现的SMBus/I2C、增强型UART和增强型SPI串行接口,个通用的16位定时器,具有6个捕捉/比较模块和看门狗定时器功能的可编程计数器/定时器阵列(PCA),硬件实时时钟(smaRTClock),
工作电压可低至1V,带64字节电池后备RAM和后备稳压器,片内上电复位、VDD监视器和温度传感器,多达24个端口I/O等。
C8051F410还具有片内上电复位、VDD监视器、看门狗定时器和时钟振荡器的C8051F41x器件是真正能独立工作的片上系统。
FLASH存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051固件。
用户软件对所有外设具有完全的控制,可以关断任何一个或所有外设以节省功耗。
片内SiliconLabs二线(C2)开发接口允许使用安装在最终应用系统上的产品MCU进行非侵入式(不占用片内资源)、全速、在系统调试。
调试逻辑支持观察和修改存储器和寄存器,支持断点、单步、运行和停机命令。
在使用C2进行调试时,所有的模拟和数字外设都可全功能运行。
两个C2接口引脚可以与用户功能共享,使在系统调试功能不占用封装引脚。
每个器件都可在工业温度范围(-40℃到+85℃)内用2.0V~2.75V的电压工C8051F410单片机片上系统单片机片上系统单片机片上系统单片机片上系统按键R分度号与S分度号相比除热电动势大15%左右,其它?
硬件课程设计说明书6作(使用片内稳压器时电源电压可达5.25V)。
C8051F410为32脚LQFP封装。
下图为C8051F410的最小系统电路图。
本程序中,用到F系列单片机自带的AD转换功能,可实现12位的数字、模拟信号的转换。
3电路原理图
4系统流程图
5源程序
#include"C8051F410.h"
#include"stdio.h"
#include"math.h"
voidPCA_Init()
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidADC_Init()
{
ADC0MX=0x07;
ADC0CN=0x80;
ADC0TK=0xF7;
}
voidVoltage_Reference_Init()
{
REF0CN=0x1A;
}
voidPort_IO_Init()
{
P1MDIN=0xFE;
P1MDOUT=0x80;
P2MDOUT=0xFF;
P2MDIN=0xF7;
P2SKIP=0x08;
P0MDIN=0x7F;
P0SKIP=0x80;
XBR1=0x40;
}
voidOscillator_Init()
{
OSCICN=0x85;
}
voidTimer_Init()
{
TMOD=0x11;
}
voidInterrupts_Init()
{
IE=0x8A;
}
voidInit_Device(void)
{
PCA_Init();
ADC_Init();
Voltage_Reference_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
Timer_Init();
}
#defineuintunsignedint//0~65535
#defineulintunsignedlongint//0~95
sbitAA=P2^0;
sbitBB=P2^1;
sbitCC=P2^2;
sbitLED_3=P2^3;
sbitLED_4=P2^4;
sbitLED_5=P2^5;
sbitLED_6=P2^6;
sbitLED_7=P2^7;
sbitCH452_SCL=P1^3;
sbitCH452_SDA=P1^4;
sbitCH452_KEY=P1^5;
bitsecond,flag=1;
unsignedchark,disp1[]={0,0,0,0,0,0,0,0};
unsignedintCMD,DAT,DAT1,jishu;
codeunsignedcharfont[32]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,//012345670xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,//89ABCDEF0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,//
0xFF,0xF7,0x00,0x62,0x02,0x12,0x7C,0x1C};//8.9.灭+—=UL
codeunsignedcharkey[16]={0xC6,0xB6,0x86,0xD6,0x96,0xA6,0xF6,0xE6,
0xC4,0xB4,0x84,0xD4,0x94,0xA4,0xF4,0xE4};//键盘位置码
uintAD_III,A1D_III,shuang=0,ewq;
ulintads,ads1=0,AD_II,AD_I,A1D_II,A1D_I;
voiddelayms(unsignedinti);
uintadc()//ADC转换函数
{unsignedintk;
TR0=0;
for(k=0;k<16;k++)
{AD0BUSY=1;
do
{}while(AD0INT==0);
AD0INT=0;
ads=ADC0H*0x0100+ADC0L;
delayms
(2);
ads1+=ads;}
ads=ads1/16;
ads1=0;
TR0=1;
return(ads);
}
/*mS延时*/
voiddelayms(unsignedinti)
{unsignedintj;
do{for(j=0;j!
=1000;j++)
{;}
}while(--i);
}
/*uS延时*/
voiddelayus(void)
{unsignedintk;
for(k=0;k<10;k++)
{;}
}
/*命令、数据送CH452*/
voidtoch452(unsignedintcmda)
{
unsignedcharj;
CH452_SDA=0;
delayus();
CH452_SCL=0;
delayus();
CH452_SCL=1;
delayus();
CH452_SCL=0;
for(j=0;j<16;j++)
{
if(cmda>=0x8000)
CH452_SDA=1;
else
CH452_SDA=0;
CH452_SCL=1;
delayus();
CH452_SCL=0;
cmda=cmda<<1;
};
CH452_SDA=1;
delayus();
CH452_SCL=1;
}
/*读键盘*/
unsignedcharrdch452(void)
{
unsignedcharj,key;
CH452_SDA=0;
delayus();
CH452_SCL=0;
delayus();
CH452_SCL=1;
delayus();
CH452_SCL=0;
key=0x9F;
for(j=0;j<8;j++)
{
if(key>=0x80)
CH452_SDA=1;
else
CH452_SDA=0;
CH452_SCL=1;
delayus();
CH452_SCL=0;
key=key<<1;
};
delayus();
key=0;
for(j=0;j<8;j++)
{
CH452_SCL=1;
if(CH452_SDA==1)
key++;
key=key<<1;
CH452_SCL=0;
delayus();
}
CH452_SDA=1;
delayus();
CH452_SCL=1;
returnkey;
}
voidfangshi(unsignedintx)
{if(x==0xc4)
{TR0=0;
AA=0;
BB=0;
CC=0;
}
elseif(x==0xb4)
{TR0=0;
AA=1;
BB=0;
CC=0;
}
elseif(x==0x84)
{TR0=0;
AA=0;
BB=1;
CC=0;
}
elseif(x==0xd4)
{TR0=0;
AA=1;
BB=1;
CC=0;
}
elseif(x==0x94)
{TR0=0;
AA=0;
BB=0;
CC=1;
}
elseif(x==0xa4)
{TR0=0;
AA=1;
BB=0;
CC=1;
}
elseif(x==0xf4)
{TR0=0;
AA=0;
BB=1;
CC=1;
}
elseif(x==0xe4)
{TR0=0;
AA=1;
BB=1;
CC=1;
}
elseif(x==0xb6)
{
TR0=1;
}
}
voidtime0()interrupt1
{TR0=0;
TH0=0x10;
TL0=0xda;
jishu++;
if(jishu==5)
{jishu=0;
shuang++;
if(shuang==4)
shuang=0;
}
TR0=1;
}
voidtime1()interrupt3
{unsignedintx,q,w,e;
TR1=0;
TH1=0x10;
TL1=0xda;
jishu++;
if(jishu==10)
{jishu=0;
q=AA;
w=BB;
e=CC;
x=e*4+w*2+q;
x=x+1;
if(x==8)
{CC=0;
BB=0;
AA=0;
}
else
{
AA=x%2;
BB=x/2%2;
CC=x/2/2%2;
}
}
TR1=1;
}
main()
{
unsignedchari,j,k,re;
bitsa=1,zhuan=1;
Init_Device();//初始化
delayms(100);
SP=0x5f;
TH0=0x10;
TL0=0xda;
TH1=0x10;
TL1=0xda;
CMD=0x9103;
toch452(CMD);
CMD=0x9500;
toch452(CMD);
TR0=1;
/////////////////////////////////////////////////////////////////////////////////////////
while
(1)
{
if(zhuan==1)
{if(shuang==0)
{AA=0;
BB=0;
CC=0;
AD_I=adc();
delayms
(2);
AA=1;
BB=0;
CC=0;
A1D_I=adc();}
elseif(shuang==1)
{AA=0;
BB=1;
CC=0;
AD_I=adc();
delayms
(2);
AA=1;
BB=1;
CC=0;
A1D_I=adc();}
elseif(shuang==2)
{AA=0;
BB=0;
CC=1;
AD_I=adc();
delayms
(2);
AA=1;
BB=0;
CC=1;
A1D_I=adc();}
elseif(shuang==3)
{AA=0;
BB=1;
CC=1;
AD_I=adc();
delayms
(2);
AA=1;
BB=1;
CC=1;
A1D_I=adc();}
AD_II=(AD_I*3375)/4095;
AD_III=(AD_II);
A1D_II=(A1D_I*3375)/4095;
A1D_III=(A1D_II);
disp1[7]=(AD_III/1000)+0x10;
disp1[6]=(AD_III%1000)/100;
disp1[5]=((AD_III%1000)%100)/10;
disp1[4]=((AD_III%1000)%100)%10;
disp1[3]=(A1D_III/1000)+0x10;
disp1[2]=(A1D_III%1000)/100;
disp1[1]=((A1D_III%1000)%100)/10;
disp1[0]=((A1D_III%1000)%100)%10;
DAT1=0xA100;
for(j=0;j<8;j++)
{
DAT=DAT1+font[disp1[j]];
toch452(DAT);
DAT1=DAT1+0x0400;
}
for(k=0;k<10;k++)
{
if(CH452_KEY==0)
{re=rdch452();
FMQ=1;
delayms(100);
FMQ=0;
while(CH452_KEY==0);
TR0=0;
ET0=0;
fangshi(re);
CMD=0x9540;
toch452(CMD);
if(re==0xc6)
{zhuan=0;
break;
}
}
else
{
delayms(10);
}
}
}
else
while(zhuan==0)
{
if(flag==1)
AD_I=adc();
elseAD_I=adc1();
AD_II=(AD_I*3375)/4095;
AD_III=AD_II;
disp1[3]=(AD_III/1000)+0x10;
disp1[2]=(AD_III%1000)/100;
disp1[1]=((AD_III%1000)%100)/10;
disp1[0]=((AD_III%1000)%100)%10;
disp1[7]=ewq+1;
disp1[6]=26;
disp1[5]=26;
disp1[4]=26;
DAT1=0xA100;
for(i=0;i<8;i++)
{
DAT=DAT1+font[disp1[i]];
toch452(DAT);
DAT1=DAT1+0x0400;
}
for(j=0;j<10;j++)
{
if(CH452_KEY==0)
{re=rdch452();
FMQ=1;
delayms(100);
FMQ=0;
while(CH452_KEY==0);
fangshi(re);
if(re==0xc6)
{zhuan=1;
break;}}
else
{delayms(10);
}}}}}
6参考文献
[1]《单片机C51设计教程与实验》;
[2]网络资源:
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51大作业 数据采集系统 C51 作业 数据 采集 系统