《单片机原理与应用》课程实验报告格式
更新时间:2023-03-11 23:58:01 阅读量: 教育文库 文档下载
- 单片机原理与应用课程设计推荐度:
- 相关推荐
(2010—2011学年第二学期)实验报告
课程名称 《单片机原理及应用》
专业班级 电子信息工程101班
姓名学号
指导教师 黄震梁 骆克静
所在学院 信息科技学院
2011年 6月
目 录
实验项目一 输入/ 输出端口的基本应用 实验项目二 定时/计数器的基本应用 实验项目三 中断系统的基本应用 实验项目四 LED实验项目五 实验项目六 实验项目七 ADC0808实验项目把 数码管的基本应用 单片机键盘的基本应用 单片机串口通讯实验 的基本应用
基于AT89C51的简单电子万年历
实验项目一 输入/ 输出端口的基本应用
1.实验目的
⑴了解MCS-51单片机的输入/输出端口的基本工作原理与使用方法;
⑵掌握MCS-51单片机的延时函数的时间估算方法。
2. 实验内容
实现与单片机某一端口相连的发光二极管的闪烁控制,要求点亮0.2s,熄灭0.2s;
3. 实验电路框图
U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031+5vPSENALEEAR1330D1LED-BIGY12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51
4.实验任务分析
⑴硬件电路说明
Led阳极接有+5v电压,当阴极为低电平(p1.0输出低电平时)led的点
亮,当阴极为高电平(p1.0输出高电平时)led的熄灭,从而实现闪烁。
⑵软件设计说明
单片机的指令的执行时间很短,数量大多在微妙级级。因此,我们在执
行某一指令时,运用c语言,插入延时程序来达到我们的要求。
1
5.实验流程框图
p1.0输出“1”;L1熄灭 开始
6.实验过程记录
⑴实验过程
首先设置延时函数(void delay02s(void) ),其次:输入控制(使p1.0端口相
隔一段时间分别输出高低电平)
延时0.2秒 p1.0输出“0”;L1亮 延时0.2秒 ⑵问题及解决方法
问题1:p1.0端口的led灯闪烁不明显,猜想原因是延迟函数设置的时间太短。解决方法:增大延时函数for循环里的数值。
问题2:程序正确,led灯不亮。解决方法:所接电阻值太大,调低到330欧。
2
7.实验总结
⑴程序正确时led灯不亮应该注意led所接电阻的主值。
⑵注意延时函数的时间。
8.成绩评定
附录 实验源程序
#include
{
unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0; for(k=248;k>0;k--); }
void main(void) { while(1)
3
{
P1_0=0; //p1_0口输出高电平,是灯点亮 delay02s();
P1_0=1; //p1_0口输出为低电平,是灯熄灭 delay02s(); }
}
实验项目二 定时/计算器的基本应用 1.实验目的
⑴掌握MCS-51定时/计数器的基本工作原理与使用方法;
⑵了解MCS-51单片机的中断服务程序的基本设计方法。
2. 实验内容
用定时器T0实现与P1.0端口相连的发光二极管以1Hz的频率闪烁,用定时器T1实
现与P1.1端口相连的发光二极管以2Hz的频率闪烁。
3. 实验电路框图
U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031+5vPSENALEEAR1330D1LED-BIGY12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51
4. 实验任务分析
4
⑴硬件电路说明
Led阳极接有+5v电压,当阴极输出为低电平(p1.0输出低电平时)与当
阴极为高电平(p1.0输出高电平时)的时间周期为1s时,led实现1hz闪烁。同理,在p1.1端口实现周期为0.5秒的闪烁。
⑵软件设计说明
用定时器T0实现与P1.0端口相连的发光二极管以1Hz的频率闪烁,用定时器T1实现与
P1.1端口相连的发光二极管以2Hz的频率闪烁。
5. 实验流程框图
5
开始 设置T0工作方式,置初值 进入中断 开启定时器中断 两个计数器加一 NO 0.5s?返回 Led状态取反 NO 1s到? 等待中端 另一个led状态取反
6. 实验过程记录
⑴实验过程
采用中断方法,设置T0工作方式和初始值,开启定时中断,由于时间
超出最大值,故采用循环,用if来判断。最后采用中断使目的端口隔时输出高低电平就可实现目的。
⑵问题及解决方法
问题: 所设定的时间值超出了计数器的最大值,解决方法:故采用if判断语句来实现多次循环来增加时间
7. 实验总结
⑴可通过if等循环语句来解除定时器的最大时间设定。
⑵了解并掌握了在TMOD 在各个方式工作下的方式 8. 成绩评定
附录 实验源程序 #include
#define uchar unsigned char sbit P1_0=P1^0; sbit P1_1=P1^1; uchar i,n; void main() {
TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; while(1) {
if(i>=10) { i=0;
6
P1_0=!P1_0; }
if(n>=5) { n=0;
P1_1=!P1_1; } } }
void time0_int(void) interrupt 1 {
TH0=(65536-50000)/256; TL0=(65536-50000)%6; i++; n++; }
实验项目三 中断系统的基本应用
1.实验目的
⑴掌握MCS-51中断系统的基本工作原理与使用方法;
⑵掌握MCS-51单片机的中断服务程序的基本设计方法。 2. 实验内容
基本部分:在P2端口接8个LED灯,用定时器T0,采用中断
方式,每隔1s使点亮的LED增加1个;当8个LED全部点亮后,重新开始下一个循环。
7
提高部分:在P3.2端口接一个按键开关,由它来控制以上LED
的循环点亮,要求也采用中断控制方式。
3. 实验电路框图
+5vU119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617D8LED-BLUED7R133018R2330XTAL2LED-BLUED59R3330RSTLED-BLUED1R4330293031PSENALEEALED-BLUED2R533012345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51LED-BLUED3R6330D4D6LED-BLUER7330LED-BLUER8330LED-BLUE 4. 实验任务分析
⑴硬件电路说明
在89c51的p2端口依次接入led灯并接上限流电阻
⑵软件设计说明
在定时器方式一下运用if函数来实现时间间隔为1秒,当时间经过9秒
来实现p2端口的取反。
5. 实验流程框图
8
开始 设置T0工作方式,置初值 NO 发光二极管增加1个点亮 等待中断 返回 1s到? 开启定时器中断 两个计数器加一 进入中断 8个都亮 8个二极管取反
6. 实验过程记录
⑴实验过程
编写程序导入89c51中运行,每经过一秒相对应端口led灯点亮,在全
部点亮后全部熄灭从新进入下一个循环。
⑵问题及解决方法
问题:如何在led全部点亮后再熄灭从新进入下一个循环。 解决方案:定时器在循环十次才点亮一盏led灯的,故经过80次后全部
9
点亮,在90次后就全部熄灭,进入下一个循环。
7. 实验总结
⑴在时间的设置上,应该准确计算出来才可以更好的来实现相应的目的
8. 成绩评定 附录 实验源程序
#include
unsigned int i,j;
void main(void) {
TMOD=0X01;
TH0=(65536-50000 )/256; TL0=(65536-50000 )%6; EA=1; ET0=1; TR0=1; P2=0XFF; while(1) {
if(i==10) { i=0; P2=P2<<1; } if(j==90) { j=0;
P2=~P2; } } }
void time0_int(void) interrupt 1 {
TH0=(65536-50000 )/256; TL0=(65536-50000 )%6; i++; j++; }
10
实验项目四 LED数码管的基本应用
1.实验目的
⑴了解LED数码管的基本工作原理与使用范围;
⑵掌握LED数码管静态显示程序的基本设计方法; ⑶掌握LED数码管动态显示程序的基本设计方法;
2. 实验内容
基本部分:用LED数码管设计一个0—99秒的计数器,LED
的显示方式可以采用静态显示方式实现;
提高部分:用LED数码管设计一个0—99.99秒的计数器,LED
的显示方式采用动态显示方式实现。
3. 实验电路框图
U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 4. 实验任务分析
11
⑴硬件电路说明
在89c51中在p0端口分别连接对应的数码管管脚,然后把它们两个共阳
端连接到p2.0,p2.1.
⑵软件设计说明
首先根据共阳端写入共阳的数组。运用中断,根据switch条件语句,来
显示十位和显示个位。从固定时间内+1直到99跳变为0.
5. 实验流程框图
进入中断 判断i末尾的值 等于1 设置定时器和建立数组 进入中断 开始 个位运行 i++ 等于十位运行 I=250? y 0 Second++;i=0
12
6. 实验过程记录
⑴实验过程
编写程序,画出模拟电路图,在89c51中导入程序后,开始仿真模拟
⑵问题及解决方法
问题:只调用一个两位的数码管,如何实现同时显示个位和十位并进行计数。解决方法:运用switch条件语句来实现
7. 实验总结
⑴一开始自己试验时采用的是静态显示方法(两个独立的数码管),故很
容易的完成了。当课上采用动态显示方式时,虽然变成复杂了些,但对于多个数码管的技术,显而易见这种方法是最好的。
8. 成绩评定 附录 实验源程序
#include
unsigned char seg_t[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main() {
TMOD=0x01;
TH0=(65536-4000)/256; TL0=(65536-4000)%6;
13
EA=1; ET0=1; TR0=1; second=0; while(1) {
switch(i&0x01) //i取1,2,3..转换16进制与0x01与,既然实现十位个位数码管
长亮
{
case 0 :{ P0=0xff; P0=seg_t[second]; P2=0x00; P2=0x02;};break; case1:{ P0=0xff; P0=seg_t[second/10]; P2=0x00; P2=0x01;};break; default: break; } } }
void time_int() interrupt 1 { TH0=(65536-4000)/256; TL0=(65536-4000)%6; i++;
if(i==250) //一秒钟 second++; if(second==99) second=0; }
14
实验项目五 单片机键盘的基本应用
1.实验目的
⑴了解独立式键盘的基本工作原理与使用范围;
⑵掌握独立式键盘的识别方法、软件消抖的原理; ⑶掌握独立式键盘程序的基本设计方法。
2. 实验内容
基本部分:在MCS-51的P3.2管脚接一独立按键,再P1端口
接8个LED,要求用按键来控制LED的循环点亮;
提高部分:将基本部分中LED的点亮方式改为闪烁。
3. 实验电路框图
15
R1R2220220R3220R4220R5220R6220R7220R8220D1D2D3D4D6D5D7D8LED-BLUEU119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617LED-BLUELED-BLUELED-BLUELED-BLUELED-BLUELED-BLUELED-BLUE18XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51
4. 实验任务分析
⑴硬件电路说明
8个接限流电阻的led灯分别接在p1端口,在p3.2处接入控制的按钮,
每按一下,led点亮的一个往下移动。
⑵软件设计说明
采用查询的方式,分别编写延时函数,按键判断函数,led灯向左移函
数和主函数。提高部分则增加闪烁函数。
16
5. 实验流程框图 有键按下? 有键按下? 寄存器初始化,I/O端口初始化 开始 延时10ms 执行代码处理送p1口显示 6. 实验过程记录
⑴实验过程
编写程序,画出模拟电路图,在89c51中导入程序后,开始仿真模拟。
⑵问题及解决方法
问题:按键按下有抖动。解决方法:在按键按下后增加延时函数,经过10ms左右再去检验。
7. 实验总结
17
⑴除了用查询的方法外还可以运用中断的方法来实现目的。
⑵在p3.3端口再接一个按钮,并在原来的key()程序中增加按键相反
的程序可以实现向右的移动。(两个按键实现左右移动的程序见下方的程序2)
8. 成绩评定 附录 实验源程序 1: #include
sbit button=P3^2; unsigned char count; unsigned char temp; unsigned char a,b; void delay10ms( ) { unsigned char i,k; for(i=0;i<20;i++) for(k=248;k>0;k--); } key() {if(button==0) { delay10ms( ); if(button==0)
{ count=count+1; if(count==8) while(button==0); } move()
{ a=temp<
18
{ count=0;}} }
P1=a|b; } void main() {count=0; temp=0xfe; P1=0xff; P1=temp; while(1) { key();
move();} }
2: /*********预处理部分*******/ #include
/*********变量定义部分*******/ sbit button=P3^2; sbit button1=P3^3; unsigned char count; unsigned char temp; unsigned char a,b;
/*********子函数部分*******/ void delay10ms( ) {
19
unsigned char i,k; for(i=0;i<20;i++) for(k=248;k>0;k--); } key() {
if(button==0) {
delay10ms( ); if(button==0) {
count=count+1;
if(count==8) { count=0;} } }
while(button==0); if(button1==0) {
delay10ms( ); if(button1==0) {
20
count=count-1;
if(count==0) { count=8;} } }
while(button1==0); }
move() {
a=temp<
} void main() {
count=0; temp=0xfe; P1=0xff; P1=temp; while(1) {
21
key(); move();
} }
实验项目六 单片机串口通讯实验
1.实验目的
⑴了解MCS-51单片机串口的基本工作原理与使用范围;
⑵掌握MCS-51单片机串口通讯程序的基本设计方法。 2. 实验内容
基本部分:在PROTEUS软件中采用串口虚拟终端,编写一个
发送程序,将自己的学号发送到虚拟终端显示;
提高部分:在单片机甲的P1口接8个开关,再单片机乙的
P1口接8个LED,编写程序,将单片机甲的开关状态再单片机乙上显示出来。
3. 实验电路框图
22
U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RXDTXDRTSCTSRST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C51 RP1RESPACK-819U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161719U2XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718123456789XTAL218XTAL29RST9RST293031PSENALEEA293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C5112345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C51D9D8D7D6D5D4D3D2LED-BLUELED-BLUELED-BLUELED-BLUELED-BLUELED-BLUELED-BLUELED-BLUE
4. 实验任务分析
⑴硬件电路说明
在单片机甲的P1口接8个开关,再单片机乙的P1口接8个LED;甲的输出端和
乙的输入端相连,甲的输入端与乙的输出端相连。
⑵软件设计说明
发射时: 串行口的初始化,设置波特率选择查询方式;接收时:在满足
23
ren=1和ri=0的条件下,开始接收。再次接受时,ri必须清零。
5. 实验流程框图
6. 实验过程记录
⑴实验过程
编写程序,画出模拟电路图,在89c51中导入程序后,开始仿真模拟。
TI=0 RI=0 发送数据 接收数据 波特率.串行口方式设置 波特率,串行口方式设置 甲 乙 开始 开始 ⑵问题及解决方法
24
问题:在实验中甲机能够发射数据,但乙机不能显示目的。解决方案:一开始ren=1与ri=0未满足。首先要满足这个才行。
7. 实验总结
⑴发射机与接收机两者的波特率相同才能够正常接收。
⑵数据发射过程中,再次发送数据时,TI必须清零。在数据接收过程中:
必须满足REN=1和RI=0.
8. 成绩评定 附录 实验源程序 发射部分
/**********预处理部分**********/ #include
#define uchar unsigned char #define uint unsigned int
/**********主函数部分**********/ void main(void) {
SCON=0x40; //控制寄存器工作方式1 PCON=0x00;
TMOD=0x20; //定时器T0工作方式2 TH1=0xf3; //波特率为1200 TL1=0xf3; TR1=1; while(1) { SBUF=P1; //将P1数据存入寄存器 while(!TI){;} //等待数据存入完毕 TI=0; //发送中断标志软件清零 } }
25
接受部分
/**********预处理部分**********/ #include
#define uchar unsigned char #define uint unsigned int
/**********变量定义部分**********/
/**********子函数部分**********/
/**********主函数部分**********/ void main(void) {
SCON=0x40; //控制寄存器工作方式1,允许数据接收 PCON=0x00;
TMOD=0x20; //定时器T0工作方式2 TH1=0xf3; //波特率为1200 TL1=0xf3; TR1=1; while(1) { P1=SBUF; //将P1接收寄存器中的数据 while(!RI){;} //等待数据接收完毕 RI=0; //接收中断标志软件清零 } }
26
实验项目七 ADC0808的基本应用
1.实验目的
⑴了解ADC0808基本工作原理与使用方法;
⑵掌握MCS-51单片机ADC程序的基本设计方法。 2. 实验内容
基本部分:利用AT89C51和ADC0808设计一个简单的数字电
压表,测量范围0-4.99V,采用3位LED数码管将采样后的结果进行显示;
提高部分:错误!未找到引用源。将数字电压表的测量范围
改为0-9.99V;
错误!未找到引用源。将基本部分的单通道数字电压表设计成一个8通道的数字电压表。
3. 实验电路框图
27
+5vU1U2(CLOCK)19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617RV126272812345252423221216100XTAL2U2IN0IN1IN2IN3IN4IN5IN6IN7ADD AADD BADD CALEVREF(+)VREF(-)ADC0808CLOCKSTARTEOCOUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT810672120191881514179RST1k+5.00Volts293031PSENALEEAOE912345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51
4. 实验任务分析
⑴硬件电路说明
在AD通道0中输入一定电压值,输出端连接c51的P0端口,P2端的数码
管显示相应的数值。
⑵软件设计说明
进行AD转换时,采用查询EOC的标志信号来检测AD转换是否完毕,若完
毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。进行AD装换之前要启动装换。
5. 实验流程框图
显示AD数据 开始
启动AD数据 读取AD数据
分出百,十,和个位 28
6. 实验过程记录
⑴实验过程
编写程序,画出模拟电路图,在89c51中导入程序后,开始仿真模拟。
⑵问题及解决方法
读取ad数据时并在数码管上显示时的数值不正确。解决方法:按比例来计算数值。
7. 实验总结
⑴一开始读取AD数据时应该先选择某一特定的通道
⑵在数码管的显示百位十位个位时,应该按照比例来计算出来,否则显示
的数值不正确
8. 成绩评定 附录 实验源程序
#include
#define uint unsigned int #define uchar unsigned char unsigned char
0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12}; sbit ST_adc=P1^0; sbit OE_adc=P1^2; sbit EOC_adc=P1^1; void delay (void) {
unsigned char q,j; for(j=0;j<=10;j++)
for(q=0;q<=150;q++);
Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
29
}
void display(uint k1,uint k2, uint k3) {
P3=0x04; P2=Tab[k1]; delay(); P3=0x02; P2=Tab[k2]; delay(); P3=0x01;
P2=Tab[k3+10]; delay(); } void main() {
uint k,k1,k2,k3,dat; while(1) {
ST_adc=0; ST_adc=1; ST_adc=0;
while(!EOC_adc) OE_adc=1; P0=0xff; P2=P0;
dat=1.96*P0;
k1=(dat); //个位 k2=((dat/10));//十位 k3=(dat/100); //百位 for(k=10;k>0;k--)
{ display(k1,k2,k3); } }}
实验项目八 1.实验目的
基于AT89C51的简单电子万年历30
⑴了解电子万年历的基本工作原理与使用方法;
⑵掌握AT89C51设计电子万年历的基本方法。 2. 实验内容
基本部分:利用AT89C51和7段LED数码管设计一个简单的
电子万年历,能显示时间、星期、年、月、日,并能进行设置;
提高部分:错误!未找到引用源。将电子万年历增加一个闹
钟功能;
错误!未找到引用源。当设定的闹钟时间到时,让单片机演奏一段音乐。
3. 实验电路框图
年RP1RESPACK-7月R1220日R2220星期D1LED-REDD3LED-REDD2LED-REDD4LED-RED8765432U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA1C31nF12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51BAT13VU281VCC1X1VCC22C16pf576X1RSTSCLKI/ODS1302CRYSTALX23C26pf 4. 实验任务分析
31
⑴硬件电路说明
DS1302三个口线分别连接C51的P3.4,P3.4,P3.6端口。P0,P1分别为
各个数码管的地址位.P2则为数码管的I/O口。
⑵软件设计说明
1:设置D1302的初始化时间;2:读取D1302的实时时间,设计函数D1302
—get1302(gettime);3:将DS1302的实时时间在数码管上显示。
5. 实验流程框图 DS1302串口发 输出一位数据 SCLK产生正 脉 冲 传输8位? Y N 返回 时间日期设置 发写多字节命令
写一个多字节 数据指针加1
3字节 Y N 返回 DS1302串口收 SCLK高电平 读 数 据,SCLK低 传输8位? Y N 返回 读时间日期 发读多字节命令 读一个多字节 数据指针加1 3字节 Y N 返回 32
6. 实验过程记录
⑴实验过程
编写程序,画出模拟电路图,在89c51中导入程序后,开始仿真模拟。
⑵问题及解决方法
问题:如何来调节年月日和星期。方法:uchar settime[]数组是用来初始化时间的。
7. 实验总结
⑴DS1302是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、
周日、时、分、秒进行计时。
⑵DS1302采用三线串行口通迅,占用IO口少。数据在SCLK的上升沿有效。每个
SCLK正脉冲锁存一位数据。
8. 成绩评定 附录 实验源程序
/**********预处理部分**********/ #include
#define uchar unsigned char #define uint unsigned int
/**********变量定义部分**********/ sbit T_CLK=P3^5; sbit T_IO=P3^4; sbit T_RST=P3^6;
uchar gettime[]={0,0,0,0,0,0,0};
uchar settime[]={0x50,0x59,0x13,0x01,0x06,0x05,0x12};//用于设置秒,分,时,日,月,星期,年
33
/**********子函数部分**********/ void delay_ms() {
uchar i,j;
for(i=0;i<2;i++)
for(j=0;j<248;j++); }
void DS1302_InputByte(uchar ucDa) //写入1byte数据 {
uchar i; uchar temp; temp=ucDa; for(i=8;i>0;i--) {
T_IO=temp&0x01; T_CLK=1; T_CLK=0;
temp=temp>>1; } }
uchar DS1302_OutputByte(void) //读取1byte数据 {
uchar i; uchar temp; temp=0;
for(i=0;i<8;i++) {
T_CLK=0;
if(T_IO!=0)temp|=(1<
return(temp); }
void DS1302_W1302(uchar ucAddr,uchar ucDa) //写入数据,输入 :据 {
T_RST=0; T_CLK=0; T_RST=1;
DS1302_InputByte(ucAddr); DS1302_InputByte(ucDa); T_CLK=1; T_RST=0;
ucAddr:地址, ucDa:数34
}
uchar DS1302_R1302(uchar ucAddr) //读取DS1302某地址的数据 {
uchar ucDa; T_RST=0; T_CLK=0; T_RST=1;
DS1302_InputByte(ucAddr); ucDa=DS1302_OutputByte(); T_CLK=1; T_RST=0; return(ucDa); }
void DS1302_Get1302(uchar ucCurtime[]) {
uchar i;
uchar ucAddr=0x81; for(i=0;i<7;i++) {
ucCurtime[i]=DS1302_R1302(ucAddr); ucAddr+=2; } }
void DS1302_Set1302(uchar *pSecDa) {
uchar i;
uchar ucAddr=0x80;
DS1302_W1302(0x8e,0x00); for(i=7;i>0;i--) {
DS1302_W1302(ucAddr,*pSecDa); pSecDa++; ucAddr+=2; }
DS1302_W1302(0x8e,0x80); }
void BCD_Num(uchar BCD,uchar ptasc[]) {
uchar num;
num=(BCD&15)+((BCD>>4)*10); ptasc[0]=num/10; ptasc[1]=num; }
void display(uchar time[])
35
{
uchar i,asc[2];
uchar line[15]={2,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar
table[15]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40};//数码管地址为的选择 for(i=0;i<5;i++) {
BCD_Num(time[i],asc); line[12-2*i]=asc[0]; line[13-2*i]=asc[1];
} BCD_Num(time[6],asc); line[2]=asc[0]; line[3]=asc[1];
BCD_Num(time[5],asc); line[14]=asc[1]; for(i=0;i<15;i++) {
P2=0xff;
P2=led[line[i]]; if(i<=7){P1=table[i];P0=0x00;} else{P1=0x00;P0=table[i];} delay_ms(); } }
/**********主函数部分**********/ void main(void) {
DS1302_W1302(0x80,0x00); DS1302_Set1302(settime); while(1) {
DS1302_Get1302(gettime); delay_ms(); display(gettime); } }
36
正在阅读:
《单片机原理与应用》课程实验报告格式03-11
单片机模拟试卷及答案11-14
欧债危机当代资本主义一体化异化噩梦07-20
人体解剖生理学习题06-29
2 基坑支护工程施工组织设计(内容)07-11
销售培训内容06-14
食品化学习题集02-29
石油工程试卷10-23
责任担当意识不强整改措施07-30
品味生活作文600字02-04
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 单片机
- 原理
- 课程
- 实验
- 格式
- 报告
- 应用
- 70-646汉语版
- 新编大学英语第三版视听说教程2答案(外研社)Unit 6
- 读书笔记 新公共管理 - 政府再造的理论与实践
- 部编本人教版八年级语文上册第3课《“飞天”凌空》导学案(含答案)
- VOLTE案例分析报告
- 优秀军人的事迹材料
- 茂名市生活垃圾焚烧发电项目
- 普通话
- 关于保险公司合规管理办法(2016)的解读
- 查汗淖尔学校体卫艺工作三化三高实施方案
- 淄博市危险性较大的分部分项工程安全管理实施细则
- 第21届“华杯赛”初赛试卷(小中组)解题分析
- 深圳城市更新调研
- 2016年篮协三人篮球赛秩序册(1)
- 党校复习题答案
- NAO介绍
- 填充墙构造柱设置原则
- 小学毕业晚会主持词(精选多篇) - 1
- 2018年社区关工委工作总结(参考价值极高)
- 学习焦裕禄精神,愚公移山精神,红旗渠精神心得体会