STC 12C5A60S2芯片的实验板报告.docx

上传人:b****6 文档编号:8496539 上传时间:2023-01-31 格式:DOCX 页数:28 大小:99.74KB
下载 相关 举报
STC 12C5A60S2芯片的实验板报告.docx_第1页
第1页 / 共28页
STC 12C5A60S2芯片的实验板报告.docx_第2页
第2页 / 共28页
STC 12C5A60S2芯片的实验板报告.docx_第3页
第3页 / 共28页
STC 12C5A60S2芯片的实验板报告.docx_第4页
第4页 / 共28页
STC 12C5A60S2芯片的实验板报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

STC 12C5A60S2芯片的实验板报告.docx

《STC 12C5A60S2芯片的实验板报告.docx》由会员分享,可在线阅读,更多相关《STC 12C5A60S2芯片的实验板报告.docx(28页珍藏版)》请在冰豆网上搜索。

STC 12C5A60S2芯片的实验板报告.docx

STC12C5A60S2芯片的实验板报告

第一章单片机概述

1.1主要芯片介绍

1.1.1MAX232芯片

MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源平转换芯片,使用+5V单电源供电。

特点:

符合所有的RS-232C技术标准;只需要单一的+5V电源供电;片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压;功耗低、典型供电电流5mA;内部集成2个RS-232C驱动器;内部集成两个RS-232C接收器。

引脚介绍:

第一部分是电荷泵电路。

由1、2、3、4、5、6脚和4只电容构成。

功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。

由7、8、9、10、11、12、13、14脚构成两个数据通道。

其中14脚(T1OUT)、13脚(RIN)、12脚(R1OUT)、11脚(T1IN)为第一数据通道。

7脚(T2OUT)、8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、为第二数据通道。

TTL/COMS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从T1IN、T2IN输入转换成TTL/COMS数据后从R1OUT、R2OUT输出。

第三部分是供电。

15引脚GND、16引脚VCC(+5V)。

 

图1-1MAX232芯片

1.1.2LCD1602液晶显示

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在各类仪表和低功耗系统中得到广泛的应用。

能显示16行2列,32个字符。

引脚介绍如下:

1引脚:

VSS接地

2引脚:

VDD接+5V电源

3引脚:

V0为液晶显示器对比度调节,接正电源时对比度最低,接地电源对比度最高,对比度过高会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

4引脚:

RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。

5引脚:

RW为读写信号线,高点评时进行读操作,低电平时进行写操作。

6引脚:

E端为使能端,当E端由高电平跳到低电平,液晶模块执行命令。

7-14引脚:

D0-D78位双向数据线

15、16引脚:

悬空引脚

 

图1-21602引脚

1.1.312C5A60S2

STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统的8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2位PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。

1、增强型8051CPU,1T(1024G),单时钟/机器周期

2、工作电压 5.5-3.5V

3、1280字节RAM 

4、通用I/O口,复位后为:

准双向口/弱上拉 

可设置成四种模式:

准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏 

每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA 

5、有EEPROM功能 

6、看门狗 

7、内部集成MAX810专用复位电路 

8、外部掉电检测电路 

9、时钟源:

外部高精度晶体/时钟,内部R/C振荡器 

10、4个16位定时器 

两个与传统8051兼容的定时器/计数器,16位定时器T0和T1 

11、3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟 

12、外部中断I/O口7路,传统的下降沿中断或电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP0/P1.3 

13、PWM2路 

14、A/D转换,10位精度ADC,共8路,转换速度可达250K/S 

15、通用全双工异步串行口(UART)

16、双串口,RxD2/P1.2,TxD2/P1.3 

17、工作范围:

-40~85 

18、封装:

LQFP-48,LQFP-44,PDIP-40,PLCC 

管脚说明:

P0.0~P0.7  P0:

P0口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。

当P0口作为输入/输出口时,P0是一个8位准双向口,内部有弱上拉电阻,无需外接上拉电阻。

当P0作为地址/数据复用总线使用时,是低8位地址线A0~A7,数据线D0~D7 。

P1.0/ADC0/CLKOUT2 

标准IO口、ADC输入通道0、独立波特率发生器的时钟输出 。

P1.1/ADC1。

P1.2/ADC2/ECI/RxD2 

标准IO口、ADC输入通道2、PCA计数器的外部脉冲输入脚,第二串口数据接收端。

P1.3/ADC3/CCP0/TxD2 

外部信号捕获,高速脉冲输出及脉宽调制输出、第二串口数据发送端。

P1.4/ADC4/CCP1/SS非

SPI同步串行接口的从机选择信号。

P1.5/ADC5/MOSI

SPI同步串行接口的主出从入(主器件的输入和从器件的输出) 。

P1.6/ADC7/SCLK

SPI同步串行接口的主入从出。

P2.0~P2.7

P2口内部有上拉电阻,既可作为输入输出口(8位准双向口),也可作为高8位地址总线使用。

P3.0/RxD 

标准IO口、串口1数据接收端。

P3.1/INT0非 

外部中断0,下降沿中断或低电平中断。

P3.3/INT1。

P3.4/T0/INT非/CLKOUT0 

定时器计数器0外部输入、定时器0下降沿中断、定时计数器0的时钟输出 。

A/D转换器的结构:

STC12C5A60AD/S2系列带A/D转换的单片机的A/D转换口在P1口,有8路10位高速A/D转换器,速度可达到250KHz(25万次/秒)。

8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。

上电复位后P1口为弱上拉型IO口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不须作为A/D使用的口可继续作为IO口使用。

单片机ADC由多路开关、比较器、逐次比较寄存器、10位DAC、转换结果寄存器以及ADC_CONTER构成。

该单片机的ADC是逐次比较型ADC。

主次比较型ADC由一个比较器和D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。

逐次比较型A/D转换器具有速度高,功耗低等优点。

需作为AD使用的口先将P1ASF特殊功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能

 

芯片引脚图:

 

图1-312C5A60S2芯片引脚

 

第二章实验板介绍

2.1实验板介绍

SCKJ-I型实验板包括:

单片机、ISP程序下载器、数码管动态显示电路、8位LED指示灯、液晶显示模块1602和12864、时钟芯片DS12C887、温度传感器DS18B20、74HC573输出口扩展、A/D转换、按键、遥控接收、继电器输出、蜂鸣器报警等电路,可进行相关电路和程序运行。

同时,单片机、74HC573输出口扩展等接有外部插针,也可用于其它相关外围设别的调试。

 

实验板实物图如下:

图2-1实验板实物图

 

整体电路:

 

图2-2整体电路图

2.2实验板地址分配及跳线说明

地址分配:

时钟芯片DS12C887地址:

0000H——1FFFH

74HC573扩展I/O口地址:

6000H——7FFFH

液晶显示模块LCD地址:

0C000H——0DFFFH

跳线说明:

J1、J2:

单片机引脚

J4、J5、J6:

用于DS18B20的硬件连接

J7、J15:

数码管的位选和段选输入

J8:

蜂鸣器、继电器的控制输入

J9、J10:

继电器的控制输出

J11:

按键的行列引脚

J12:

扩展至J11附近的P1口引脚

J13:

8位LED灯的控制输入

J14:

I/O扩展74HC573的输出,与J13或者J15可用跳线连接

J16、J17:

电位器引出端

J18:

STC单片机下载输入端,可用跳线器与电路板上的下载器输出端Ju1连接

J19:

可用跳线器将遥控输出、DS12C887中的中断信号连接到单片机的INT1、INT0

J21:

地线引出端

J22:

+5V引出端

 

第三章调试

3.1LED灯从低八位到高八位一次亮

3.1.1调试程序

#include

#defineucharunsignedchar

#defineuintunsignedint

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++);

}

voidMain(void)

{

while

(1)

{

P1=0xfe;

Delay(100);

P1=0xfd;

Delay(100);

P1=0xfb;

Delay(100);

P1=0xf7;

Delay(100);

P1=0xef;

Delay(100);

P1=0xdf;

Delay(100);

P1=0xbf;

Delay(100);

P1=0x7f;

Delay(100);

}

}

 

3.2A/D电路

3.2.1程序

voidDelay(WORDn)

{

WORDy;

while(n--)

{

y=500;

while(y--);

}

}

/************************************************************************

Functionname:

write_cmd

Descriptions:

向lcd输入指令

************************************************************************/

voidwrite_cmd(BYTEcmd)

{

P20=0;//写指令模式

P21=0;

P27=1;

P37=0;

P36=0;

P0=cmd;

P27=0;

P37=0;

P36=0;

Delay(10);

}

/**********************************************************************

Functionname:

write_data

Descriptions:

写入数据

**********************************************************************/

voidwrite_data(BYTEdat)

{

P20=1;//写数据模式

P21=0;

P27=1;

P37=0;

P36=0;

P0=dat;

P27=0;

P37=0;

P36=0;

Delay(10);

}

/***********************************************************************

Functionname:

write_string

Descriptions:

写入字符串

***********************************************************************/

/*voidwrite_string(BYTE*s)

{

while(*s!

='\0')//'\0'为字符串结束标志

{

write_data(*s);

s++;

}

}

*/

/**********************************************************************

Functionname:

set_display_place

Descriptions:

设置字符的显示位置

**********************************************************************/

voidset_display_place(BYTEline,column)

{

BYTEaddress;

if(line==1)

{

address=0x80+column;

}

elseif(line==2)

{

address=0xc0+column;

}

write_cmd(address);

}

/*******************************************************************

Functionname:

将字符串写到指定的位置

Descriptions:

将字符串显示在lcd的特定位置

*******************************************************************/

/*voidwrite_string_lcd(BYTEline,column,unsignedchar*string)

{

set_display_place(line,column);

write_string(string);

Delay

(1);

}

*/

voidwrite_data_lcd(BYTEline,column,dat)

{

set_display_place(line,column);

write_data(dat);

Delay

(1);

}

/******************************************************************

Functionname:

将字符写到指定的位置

Descriptions:

将字符串显示在lcd的特定位置

*******************************************************************/

/***************************************************

************液晶模块初始化******************************

****************************************************/

voidlcd_init(void)

{

write_cmd(0x06);//

write_cmd(0x38);//

//write_cmd(0x38);//

write_cmd(0x0c);//

write_cmd(0x01);//

}

/*****************LED显示位置********************/

voiddisplay(uintz)

{

uchari;

disbuf[8]=z/10000+0x30;

disbuf[10]=z%10000/1000+0x30;

disbuf[11]=z%1000/100+0x30;

disbuf[12]=z%100/10+0x30;

disbuf[13]=z%10+0x30;

for(i=0;i<14;i++)

write_data_lcd(1,1+i,disbuf[i]);

}

/*voidread_ad(void)

{

uintad_data[8];

uintx,a,b;

uchari;

uintres,res1;

ucharstatus=0;

ADC_CONTR=0x80;

Delay

(1);

for(i=0;i<8;i++)

{

ADC_CONTR=(0x80|i);

ADC_CONTR|=0x80;

status=0;

while(!

(ADC_CONTR&0x10));

ADC_CONTR&=0xE7;

res=ADC_RES;

res1=ADC_RESL;

ad_data[i]=res*256+res1;

}

for(i=0;i<8;i++)

{

x=ad_data[i];

a=x/10+0x30;

b=x%10+0x30;

write_data_lcd(2,1,a);

write_data_lcd(2,2,b);

}

}

*/

//------------------------------------------------------------------------------

uintAD_get(ucharchannel)

{

ADC_CONTR=0x88|channel;//开启AD转换10001000即POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0

_nop_();_nop_();_nop_();_nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR寄存器

while(!

(ADC_CONTR&0x10));//等待转换完成

ADC_CONTR&=0xe7;//关闭AD转换,ADC_FLAG位由软件清0

return(ADC_RES*4+ADC_RESL);//返回AD转换完成的10位数据(16进制)

}

//------------------------------------------------------------------------------

floatAD_work(ucharchannel)

{

floatAD_val;//定义处理后的数值AD_val为浮点数

uchari;

for(i=0;i<100;i++)

AD_val+=AD_get(channel);//转换100次求平均值(提高精度)

AD_val/=100;

AD_val=(AD_val*5)/1024;//AD的参考电压是单片机上的5v,所以乘5即为实际电压值

AD_val=AD_val*10000;

returnAD_val;

}

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

voidAD_init()

{

P1ASF=0x01;//P1.0作为模拟功能AD使用

ADC_RES=0;//清零转换结果寄存器高8位

ADC_RESL=0;//清零转换结果寄存器低2位

ADC_CONTR=0x80;//开启AD电源

Delay

(2);//等待1ms,让AD电源稳定

ES=1;

EA=1;

}

3.31602显示学号和姓名拼音

3.3.1调试程序

#include"reg51.h"

#include"absacc.h"

typedefunsignedcharBYTE;

typedefunsignedintWORD;

/*液晶1602口地址*/

#definewr_comXBYTE[0xC000]//写命令

#definewr_dataXBYTE[0xC100]//写数据

#definerd_comXBYTE[0xC200]//读命令

#definerd_dataXBYTE[0xC300]//读数据

voidlcd_init(void);//lcd初始化

voidwrite_cmd(BYTEcmd);//lcd写命令

//voidwrite_string(unsignedchar*s);//写字符串

voidwrite_data(BYTEdat);//写数据

voidset_display_place(BYTEline,column);

voidwrite_string_lcd(BYTEline,column,unsignedchar*string);

//voidwrite_data_lcd(BYTEline,column,dat);

//voidcrti(unsignedlongdat);

//voidcrt_r(floatx,BYTEN);

voidDelay(WORDn)

{

WORDx;

while(n--)

{

x=500;

while(x--);

}

}

/*

voidDelay2(WORDn)

{

WORDx;

while(n--)

{

x=5000;

while(x--);

}

}

*/

/************************************************************************

Functionname:

write_cmd

Descriptions:

向lcd输入指令

************************************************************************/

voidwrite_cmd(BYTEcmd)

{

BYTEdl;

do{

dl=rd_com;

}while((dl&0x80)!

=0);//判忙

wr_com=cmd;

Delay

(1);

}

/**********************************************************************

Functionname:

write_data

Descriptions:

写入数据

**********************************************************************/

voidwrite_data(BYTEdat)

{

BYTEdl;

do{

dl=rd_com;

}while((dl&0x80)!

=0);//判忙

wr_data=dat;

Delay

(1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1