STC 12C5A60S2芯片的实验板报告Word文件下载.docx
《STC 12C5A60S2芯片的实验板报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《STC 12C5A60S2芯片的实验板报告Word文件下载.docx(57页珍藏版)》请在冰豆网上搜索。
32个可编程I/O口线;
三个16位定时器/计数器;
八个中断源;
全双工UART串行通道;
低功耗空闲和掉电模式;
掉电后中断可唤醒;
看门狗定时器;
双数据指针;
掉电标识符。
部分引脚介绍:
P0、P1、P2、P3均可做双向I/O口,当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
P2口作为高8位地址线,也有第二功能。
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5MOSI(在系统编程用)
P1.6MISO(在系统编程用)
P1.7SCK(在系统编程用)
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.1.2MAX232芯片
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计
的单电源电平转换芯片,使用+5v单电源供电。
主要特点:
符合所有的RS-232C技术标准;
只需要单一+5V
电源供电;
片载电荷泵具有升压、电压极性反转能力,能够产生+10
V和-10V电压V+、V-;
4、功耗低,典型供电电流5mA;
内部集
成2个RS-232C驱动器;
内部集成两个RS-232C接收器。
引脚介绍:
第一部分是电荷泵电路。
由1、2、3、4、5、6
图2.2MAX232引脚图
脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给
RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、
9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;
DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
2.1.3LCD1602液晶显示器
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多
优点,在各类仪表和低功耗系统中得到广泛的应用。
工业字符型液晶,
图2.31602引脚图
能够同时显示16x2即32个字符(16列2行)。
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接
地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一
个10K的电位器调整对比度(建议接地,弄不好有的模块会不显示)。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15~16脚:
空脚(有的用来接背光)
第三章单片机电路板焊接
3.1单片机的焊接
图3-1
3.2焊接原件清单
表3-1原件清单
序号
名称
型号
数量
说明
1
电容
20p
2
C01C02
104
6
C1-C6
3
电解电容
100uf/16V
C7
4
4.7uf/16V
C9
5
1uf/16V
C10-C14
晶振
11.0592MHz
Y1
7
电位器
10k
3296VR1VR2VR3
8
电阻
10Ω
R13
9
200Ω
10
43
R7R8
11
1k
R2R3R9-R12
12
2k
R6
13
4.7k
R4
14
8.2k
R1
15
R7
16
电阻排
430Ω
9p
17
18
发光二极管
白发红Φ
D1-D8
19
白发绿Φ
20
白发蓝Φ
21
二极管
IN4148
D9
22
三极管
8550
T1-T6
23
接插件
单排插针
间距2.54mm
24
双排插针
25
单排插座40p
26
USB母座
Mini90度弯针(5PF)
27
集成电路
4016
替换74CS14
28
74HC573
U6
29
74LS00
U7
30
STC12C5A60S2
DIP40封装U1
31
HS0038
红外接收XK1
32
DS12C887
U4时钟
33
MAX232
U5
34
温度传感器
DS18B20
DS1
35
数码管
MT03641B
U9
36
按键
4脚
6*6*6mm
37
自锁开关
7*7mm
38
蜂鸣器
5V
连续声
39
IC座
DIP8
40
DIP14
41
DIP16
42
DIP20
DIP24
宽
44
DIP40
45
液晶模块
LCD1602
蓝背光
46
Jn12864J
下载器
47
CH341A
SOL-28
48
贴片0805
49
50
10uF
51
52
53
54
白发红
55
12MHz
56
3.3焊接注意事项
焊接操作注意事项有:
①保持烙铁头的清洁,因为焊接时烙铁头长期处于高温状态,其表面很容易氧化并沾上一层黑色杂质形成隔热层,使烙铁头失去加热作用。
②采用正确的加热方法,要靠增加接触面积加快传热,而不要用烙铁对焊件加力。
应该让烙铁头与焊件形成面接触而不是点接触。
③加热要靠焊锡桥,要提高烙铁头加热的效率,需要形成热量传递的焊锡桥。
④在焊锡凝固之前不要使焊件移动或振动用镊子夹住焊件时,一定要等焊锡凝固后再移去镊子。
⑤焊锡量要合适,过量的焊锡会增加焊接时间,降低工作速度。
⑥不要用过量的焊剂,适量的焊剂是非常有必要的。
过量的松香不仅造成焊后焊点周围脏不美观,而且当加热时间不足时,又容易夹杂到焊锡中形成“夹渣”缺陷。
在我自己的焊接当中,也出现了焊锡量不足和过多的状况,最后导致接入电源后无法正常使用的现象。
同时注意元件的焊接顺序也很重要,选择合适的焊接顺序,不仅便于焊接,而且不至于导致元件破损。
第四章c语言应用程序
4.1KeiluVision的使用
打开“KeiluVision”,点击“project”,在弹出的对话窗口中选择“newproject”新建工程,建立工程文件。
在弹出的窗口中选择“Atmel”中的“AT89S52”确定后即可添加8051源代码。
选中工程文件右键点“Optionfortarget”再点“Output”“CreateHEX”创建HEX文件;
点“File”之后点击“NEW”即可在出现的文本框中输入程序,保存路径与工程文件相同,且用英文名,格式为“.c”。
再添加源文件到project。
程序输入完了要保存,编译查看有无错误,有就修改,如果没有,将PC机与单片机用ISP下载线连接起来,USB驱动文件中,选择isp编程下载软件中“progisp”运行程序,在文件夹下选“调入flash”,调入hex文件,之后点击“自动”即可运行程序查看现象。
串行通信的调试可利用串行通信助手软件,查看单片机是如何与PC机进行数据通信的。
4.2流水灯程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
voidDelay(uintdel)
{
uinti,j;
for(i=0;
i<
del;
i++)
for(j=0;
j<
1827;
j++)
;
}
voidMain(void)
{
while
(1)
P1=0xfe;
Delay(100);
P1=0xfd;
P1=0xfb;
P1=0xf7;
P1=0xef;
P1=0xdf;
P1=0xbf;
P1=0x7f;
}
4.3流水灯高低位循环闪烁
#include<
voidmain(void)
inti;
i<
2;
i++)
P1=0xfe;
P1=0xfd;
P1=0xfb;
P1=0xf7;
P1=0xef;
P1=0xdf;
P1=0xbf;
P1=0x7f;
}
P1=0x00;
Delay(200);
P1=0xff;
4.4AD转换测温度
#include<
reg51.h>
absacc.h>
typedefunsignedcharBYTE;
typedefunsignedintWORD;
#definewr_comXBYTE[0xD000]//写命令
#definewr_dataXBYTE[0xD100]//写数据
#definerd_comXBYTE[0xD200]//读命令
#definerd_dataXBYTE[0xD300]//读数据
sbitDQ=P1^7;
//ds18b20与单片机连接口
unsignedcharcodestr1[]={"
"
};
unsignedcharcodestr2[]={"
TEMP:
unsignedchardatadisdata[5];
//百、十、个、小数位
unsignedinttvalue;
//温度值
unsignedchartflag;
//温度正负标志
voiddelay1ms(unsignedintms)//延时1毫秒子函数,形参为ms
unsignedinti,j;
ms;
j<
500;
j++);
voidwrite_cmd(BYTEcmd)
{
BYTEdl;
do{
dl=rd_com;
}while((dl&
0x80)!
=0);
//判忙
wr_com=cmd;
delay1ms
(1);
voidwrite_data(BYTEdat)
wr_data=dat;
}
voidlcd_init()//lcd初始化设置子函数,不带参数,0x38是显示模式设置,其余是显示开/关及光标设置,无顺序
delay1ms(15);
write_cmd(0x38);
//调用写控制指令子函数,并用实参"
00111000"
代替形参com
//0x38表示设置为16*2显示,每个块为5*7点阵,8位数据接口
delay1ms(5);
write_cmd(0x08);
00001000"
//0x08表示设置为关显示、不显示光标、光标不闪烁
write_cmd(0x01);
00000001"
//0x01表示显示数据清屏(数据指针清0,所有显示清0)
write_cmd(0x06);
//调用写控制指令子函数,并用实参"
00000110"
//0x06表示当读或写一个字符后地址指针加1,且光标加1;
当写一个字符时,整屏显示不移动
write_cmd(0x0c);
00001100"
//0x0c打开显示、不显示光标、光标不闪烁
voiddisplay(unsignedchar*p)//lcd显示字符串子函数
while(*p!
='
\0'
)//测试是否等于'
,即判断是否结尾
write_data(*p);
//显示指针所指的字符串
p++;
//指针加1
delay1ms
(1);
voidinit_play()//初始化显示子函数
lcd_init();
//调用lcd初始化设置子函数,对LCD进行初始化
write_cmd(0x80);
10000000"
//并将数据指针定位到第一行第一个字符处
display(str1);
//从第一行第一个字符处显示字符串str1
write_cmd(0x80+0x40);
//并将数据指针定位到第二行第一个字符处
display(str2);
//从第二行第一个字符处显示字符串str2
voidwrite_string(BYTE*s)
while(*s!
='
)//'
为字符串结束标志
write_data(*s);
s++;
voidset_display_place(BYTEline,column)
BYTEaddress;
if(line==1)
address=0x80+column;
elseif(line==2)
address=0xc0+column;
write_cmd(address);
voidwrite_string_lcd(BYTEline,column,unsignedchar*string)
set_display_place(line,column);
write_string(string);
voiddelay_18b20(unsignedinti)//延时1微秒
while(i--);
voidds18b20rst()//ds18b20初始化子函数
//要求"
数据线拉高-延时-数据线拉低-延时大于480微妙-数据线拉高-延时等待"
unsignedcharx=0;
DQ=1;
//信号线DQ复位
delay_18b20(40);
//延时
DQ=0;
//DQ拉低
delay_18b20(4000);
//精确延时大于480us
//拉高
delay_18b20(400);
voidds18b20wr(unsignedcharwdata)/*写数据子函数,无返回值,含参数*/
unsignedchari=0;
for(i=8;
i>
0;
i--)//要写完一个字节,故需要重复8次以下操作
{
DQ=0;
//数据线拉低
DQ=wdata&
0x01;
//wdata是一个形参,将其与00000001进行按位与
//按从低到高的顺序发送数据(一次发送一位)
delay_18b20(100);
DQ=1;
//最后将数据线拉高
wdata>
>
=1;
//将wdata右移1位
unsignedchards18b20rd()//读数据子函数,是有返回值dat
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
i--)//要读完一个字节,故需要重复8次以下操作
{
//给脉冲信号
dat>
if(DQ)
dat|=0x80;
return(dat);
//返回dat
read_temp()//读取温度值并转换的子函数,有返回值温度值tvalue
unsignedchara,b;
ds18b20rst();
//调用ds18b20初始化子函数
ds18b20wr(0xcc);
//调用写数据子函数,向ds18b20写命令0xcc
//ccH表示跳过ROM读序列号,适用于单机工作,直接向18b20发送温度变换命令
ds18b20wr(0x44);
//调用写数据子函数,向ds18b20写命令0x44