- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.实验原理图:(附录1)
3.源程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit p0_0=P0^0;
sbit p0_1=P0^1;
uchar temp,count;
void main()
{
temp=0xfe;
{
count=0;
temp=_cror_(temp,1);
P1=temp;
}
}
}
}
void timer0()interrupt 1
{
TH0=0X3C;
TL0=0XB0;
count++;
}
4.实验总结:通过本次实验,对定时器的中断有了更进一步的掌握,也能够熟练应用定时器,还有按键控制流水灯的流动方向。不过这次实验的难度要高于上一次,经过了多次调试之后才把实验完成,耐心决定一切啊。
for(;Delaytime>0;Delaytime--)
for(j=0;j<100;j++);
}wk.baidu.com
(2).采用定时器定时,延迟输出语句。P0_0控制启动/停止。
#include<reg51.h>
#include<stdio.h>
sbit p0_0=P0^0;
#define uchar unsigned char
{
TH0=0X3C;
TL0=0XB0;
count++;
}
3.实验心得:
第一次实验不需要硬件实现,只需要用软件仿真,串口输出“hello word”语句就ok,所以此次实验比较简单,不需要费太多时间就能把实验完成。
二.键控流水灯
1.实验要求:
8051单片机的P1口的P1.0—P1.7分别接有LED(D1—D8),当某一端口输出,为“0”时,相应的LED点亮,P0.0、P0.1分别接有两个按钮K1和K2。现要求编写可键控的流水灯程序,K1=0时,灯向左循环流动;K2=0时,灯向右循环流动;K1,K2同时为0时,灯开始一左一右流动;K1,K2同时为1时,灯停止流动。
P1=temp;
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
while(1)
{
if(p0_0==0)
{
TR0=1;
if(count==20)
{
count=0;
temp=_crol_(temp,1);
P1=temp;
}
}
if(p0_1==0)
{
TR0=1;
if(count==20)
三.串并转换实验
1.实验目的:了解单片机串口方式0,及移位寄存器164应用。
实验说明:串口方式0为移位寄存方式,数据由P3_0端口输入,同步移位脉冲由P3_1端口输出,发送的8位数据低位在前。利用单片机的串行接口方式0扩展并行接口输入输出,在LED灯上循环显示00~99。
2.设计流程图:
3.实验连线:DIN连接P3_0;CLK连接P3_1
sbit p0_0=P0^0;
void Delay(unsigned int Delaytime);
void main(void)
{
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1定时方式2
TCON = 0x40; //设定时器1开始计数
TH1 = 0xE8; //11.0592MHz 1200波特率
4.实验原理图(附录2)
5.源程序:
#include <reg51.h>
#include <stdio.h>
typedef unsigned char BYTE;
BYTE i;//显示的十位数
BYTE j;//显示的个位数
BYTE dis_code[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
TL1 = 0xE8;
TI = 1;
TR1 = 1; //启动定时器
while(1)
{
if(p0_0==0)
{Delay(10000);
printf ("Hello World!\n"); //显示Hello World
}
}
}
void Delay(unsigned int Delaytime)
{unsigned int j=0;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
TI = 1;
TR1 = 1; //启动定时器
while(1)
{
if(p0_0==0)
{
TR0=1;
if(count==200)
{
count=0;
printf("hello world!\n");
}
}
}
}
void timer0()interrupt 1
#define uint unsigned int
uchar count;
void main()
{
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x21;
TCON = 0x40; //设定时器1开始计数
TH1 = 0xE8; //11.0592MHz 1200波特率
TL1 = 0xE8;
//01 2 3 4 5 6 7 8 9
voidmain()
{
char time=0xFFFF,count=0x00FF;//延时常数
SCON=0X00;
do
{
for (i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
SBUF=dis_code[j];//发送字符个位
while(TI==0);TI=0;
SBUF=dis_code[i];//发送字符十位
while(TI==0);TI=0;//是否发送完
do
{
while(time--);
}
while(count--);
}
}
}
while(1);
}
6.实验心得:最后一次实验,设计过程稍难,虽然硬件只需要连接两根线就可以了,但是内部结构较为复杂,需要掌握74HC164芯片的功能和拐角,同时也为时分秒的设计奠定了一定的基础。通过这几次实验,我觉得单片机实验还是很有意思的。虽然我们只是学了一些皮毛,但是让我感觉依然很受用,这门课的重点是实践,只有搞好了动手环节,才能真正学好这门课。
《单片机原理与应用及C51程序设计》
实验报告
一.软件仿真
1.实验要求
基本要求:用串口输出“hello word”语句。增加的要求:延时或定时输出语句,采用查询/中断的方式控制启动/停止。
2.源程序:
(1).采用延时函数,延迟输出语句,p0_0控制启动/停止。
#include <reg51.h>
#include <stdio.h>