资源描述
实验三 定时器实验
一、实验目的
1、掌握单片机系统定时器断的原理及使用方法。
2、掌握矩阵键盘实现方法。
3、掌握串口传送的实现方法
二、实验内容
1、见图一。假设单片机晶振频率设定为12MHz。用中断方式来完成以下要求,且通过虚拟示波器观看波形。
A、使用定时器1 以方式1 产生周期为500us 的等宽方波连续脉冲,并由P1.0 输出。用中断方式来完成。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p10=P1^0;
void main()
{TMOD=0x10;
EA=1;
ET1=1;
TR1=1;
TH1=0xff;
TL1=0x06;
while(1);
}
void t1_int() interrupt 3
{TH1=0xff;
TL1=0x06;
p10=~p10;}
B、完成A功能,用查询方式来完成
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p10=P1^0;
void main()
{TMOD=0x10;
TR1=1;
TH1=0xff;
TL1=0x06;
for( ; ;)
{if(TF1==1)
TF1=0;p10=~p10;}
}
C、使用定时器0 以方式2 产生周期为200us 的等宽方波连续脉冲,并由P1.1 输出。用中断方式来完成。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p10=P1^0;
void main()
{TMOD=0x02;
EA=1;
ET0=1;
TR0=1;
TH0=0x9c;
TL0=0x9c;
while(1);
}
void t0_int() interrupt 1
{p10=~p10;}
D、编程使T0 工作于定时工作方式1,产生500us 等宽方波从P2.7 输出。T1 工作于计数工作方式2,其计数外部脉冲由T0 产生,即P2.7 引脚与P3.5(T1 引脚)相连,T1 每计数100个,P1.2 取反输出一次。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p2_7=P2^7;
sbit p3_5=P3^5;
void main()
{TMOD=0x61;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
TH0=0xff;
TL0=0x06;
TH1=0x9c;
TL1=0x9c;
while(1);
}
void t0_int() interrupt 1
{ TH0=0xff;
TL0=0x06;
p2_7=~p2_7;}
void t1_int() interrupt 3
{p3_5=~p3_5;}
图一
2、见图二。假设单片机晶振频率设定为12MHz。完成以下功能。
(按键元件名称 BUTTON)
A、通过外部按键(INT1 引脚连接)以中断方式控制LED 的上移和下移。(利用连接R2 R3的2个按键实现LED 的上移和下移)
B、通过外部按键(T0 引脚连接)以中断方式控制LED 的上移和下移。(利用连接R2 R3的2个按键实现LED 的上移和下移)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
EA=1;
EX1=1;
ET0=1;
TR0=1;
TMOD=0x06;
TH0=0x10;
TL0=0x10;
P1=0xff;
while(1);
}
void exint1() interrupt 2
{P1=P1<<1|0x01;} //下移
void t0_int() interrupt 1
{P1=P1>>1|0x80;} // 上移
C、通过INT0 引脚外界4 输入与门扩展外部中断,编程实现扩展出的四个开关以中断方式,分别实现LED 的上移、下移、亮和灭。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint k)
{uchar i,j;
for(i=0;i<k;i++)
for(j=0;j<120;j++);}
void shangyi()
{while(1)
{P1=P1>>1|0x80;
delay(100);}
}
void xiayi()
{while(1)
{P1=P1<<1|0x01;delay(100);}
}
void main()
{EA=0;
EX0=0;
P1=0xff;
}
void int0() interrupt 0
{if(P2==0xfe)
{shangyi();}
if(P2==0Xfd)
{xiayi();}
if(P2==0xfb)
{P1=0x00;}
if(P2==0xf7)
{P1=0xff;}
}
图二
3、见图三,编程实现以下功能。按不同位置按键,数码管显示该按键代表数值。若无按键按下时,显示上一次按键的数值。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key;
uchar key_code[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
uchar disp_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint k)
{uchar i,j;
for(i==0;i<k;i++)
for(j=0;j<120;j++);}
void show()
{
if(key<=15)
P0=disp_code[key];
}
uchar rekey()
{uchar scan1,scan2,keycode,a;
P1=0x0f;
scan1=P1;
if((scan1&0x0f)!=0xf)
{delay(20);
scan1=P1;
if((scan1&0x0f)!=0xf)
{P1=0xf0;
scan2=P1;
keycode=scan1|scan2;
for(a=0;a<16;a++)
{if (keycode==key_code[a])
{key=a;
return (key);}
}
}
}
else P1=0xff;
return (16);
}
void main()
{ while(1)
{P0=0x00;
P1=0xf0;
if((P1&0x0f)!=0xf)
{rekey();
show();
}
}
}
图三
4、要求单片机U2 采用串行方式发送给单片机U1 一段数据码。单片机U1 利用该数据码在七段数码管上显示数字0-F(间隔时间1 秒)。周而复始,循环不息。
设fosc=11.0592MHz.
#include<reg51.h> //send file
#define uchar unsigned char
#define uint unsigned int
uchar disp_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint k)
{uchar i,j;
for(i==0;i<k;i++)
for(j=0;j<120;j++);}
void send(uchar data1)
{
SBUF=data1; //发送数据
while(TI==0) //判断是否发送完成,若未完成,等待
;
TI=0; //发送完成后,人工设置TI为0,以便下次发送数据
}
void main()
{uchar i;
TMOD=0x20;
TL1=0xe8;
TH1=0xe8;
PCON=0X00;
SCON=0X40;
TR1=1;
while(1)
{
for(i=0;i<16;i++)
{
send(disp_code[i]);
delay(1000);
}
}
#include<reg51.h> //receive file
#define uchar unsigned char
#define uint unsigned int
uchar receive(void)
{
uchar data1;
while(RI==0);//判断是否接收完成,若未完成,等待
RI=0; //接收完成后,人工设置RI为0,以便下次接收数据
data1=SBUF; //将接收的数据给变量data1。
return data1;
}
void main()
{uchar i;
TMOD=0x20;
TL1=0xe8;
TH1=0xe8;
PCON=0X00;
SCON=0X50;
TR1=1;
while(1)
{
for(i=0;i<16;i++)
{P0=receive();}
}
}
图四
单片机实验报告
实验名称: 实验三 定时器实验
学生姓名: 刘凤楠
专 业: 电子信息工程
班 级: 电信09-2
学 号: 09034030253
日 期: 2011 年 11 月 11 日
展开阅读全文