1、
《单片机原理与应用》课程
实 验 报 告
北京理工大学机电学院
18
单片机原理与应用实验报告
实验一 P1口基本实验
一、实验目的
掌握如何建立项目,并用Keil C51软件调试程序。
二、实验内容
掌握P1口基本实验中的编程方法,调试程序。
三、实验程序
#include
2、int i;
for(i=0;i 3、i<8;i++) {
L=L>>1; /*L右移1位*/
display();
}
}
}
由两边向中间亮:
#include 4、FF;
display();
L=0x00;
display();
while(1)
{
L=0x01;
display();
for(i=0;i<8;i++)
{
L=L<<1;
display();
}
L=0x80;
display();
for(i=0;i<8;i++) {
L=L>>1;
display();
}
}
}
实验二 P1口扩展实验
一、实验目的
掌握EL-8051-III型单片机实验系统。
二、实验内容
掌握P1口扩展实验中 5、的编程方法,调试程序。
三、实验程序
#include 6、se 0:P1=0xff;break;
case 1:P1=0xf3;delay(1000);P1=0xff;delay(1000);break;
case 2:P1=0xcf;delay(1000);P1=0xff;delay(1000);break;
case 3:P1=0x03;delay(1000);P1=0xff;delay(1000);break;
default: break;
}
}
}
实验三 简单I/O口扩展实验
7、 ——交通灯控制实验
一、实验目的
学习在单片机系统中扩展简单I/O接口的方法。
二、实验内容
掌握交通灯控制的编程方法,调试程序。
三、实验程序
#include 8、 *L=0xff;
while(1) {
*L=~0x81;
delay(3000);
for(i=0;i<=9;i++) {
*L=~0x21;
delay(1000);
}
*L=~0x01;
delay(100);
for(i=0;i<=4;i++) {
*L=~0x41;
delay(200);
*L=~0x01;
delay(200);
}
*L=~0x81;
delay(500);
for(i=0;i<=9;i++) {
*L=~ 9、0x84;
delay(1000);
}
*L=~0x80;
delay(100);
for(i=0;i<=4;i++) {
*L=~0x82;
delay(200);
*L=~0x80;
delay(200);
}
}
}
实验四 中断实验
——有急救车的交通灯控制实验
一、实验目的
学习中断处理程序的编程方法。
二、实验内容
掌握急救车的交通灯控制的编程方法,调试程序。
三、实验程序
#include 10、
unsigned char xdata *code L=0xCFB0;
sbit flag=P3^2;
delay(unsigned int ms) {
unsigned char j;
unsigned int i;
for(i=0;i 11、
main() {
unsigned char i;
IP=0x01;
IE=0x81;
*L=0xff;
while(1) {
for(i=0;i<3;i++) {
*L=~0x81;
delay(1000);
}
for(i=0;i<=9;i++) {
*L=~0x21;
delay(1000);
}
*L=~0x01;
delay(100);
for(i=0;i<=4;i++) {
*L=~0x41;
delay(200);
*L=~0x01; 12、
delay(200);
}
*L=~0x81;
delay(200);
for(i=0;i<=9;i++) {
*L=~0x84;
delay(1000);
}
*L=~0x80;
delay(100);
for(i=0;i<=4;i++) {
*L=~0x82;
delay(200);
*L=~0x80;
delay(200);
}
}
}
实验五 内部定时器实验
一、实验目的
学习复合定时的编程方法。
二、实验内容
掌握复合定时的编程方法, 13、调试程序。
三、实验程序
#include 14、in() {
TMOD=0x61;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=256-5;
TL1=256-5;
IP=0x08;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1);
}
15、
实验六 内部定时器与中断实验
一、实验目的
学习内部定时器/计数器的使用和编程方法。
二、实验内容
掌握定时器与中断复合编程方法,调试程序。
三、实验程序
#include 16、ned int j;
unsigned int i;
for(i=0;i 17、50000)%256;
i++;
if(i>=5) {
i=0;
if(a>15) {
a=0;
}
P1=~l[a];
a++;
}
}
main() {
int a;
IP=0x01;
IE=0x83;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
实验七 数码显示实验
一、实验目的
学习数码管显示数字的原理。
二、 18、实验内容
掌握动态扫描键盘的方法,调试程序。
三、实验程序
#include 19、
delay(unsigned int ms) /*延时子程序*/
{ unsigned char j;
unsigned int i;
for(i=0;i 20、为1秒*/
{BUF=0; /*计数次数清零*/
SBF0+=1; /*秒个位加一*/
if(SBF0==10) /*满10秒*/
{SBF0=0; /*秒个位清零*/
SBF1+=1; /*秒十位加一*/
if(SBF1==6) /*秒十位为6*/
{SBF1=0; /*秒十位清零*/
MBF0+=1; /*分个位加一*/
if(MBF0==10) /*分个位为10*/
{MBF0=0; /*分个位清零*/
MBF1+=1; /*分十位加一*/
21、 if(MBF1==6) /*分十位为6*/
{MBF1=0;/*分十位清零*/
}
}
}
}
}
}
main()
{unsigned char A[6]; /*存放分秒及分隔符偏移地址*/
unsigned char i,K;
A[2]=A[3]=10; /*分隔符偏移地址*/
TMOD=0x01; /*设定定时器工作方式*/
TH0=0x38; /*延时一段时间*/
TL0=0x00;
EA=1; /*开中断*/
ET0=1; 22、 /*开定时器*/
TR0=1;
while(1)
{K=0x01; /*初始位LED6*/
for(i=0;i<6;i++) /*移位显示*/
{P1=~K;
*L=table[A[i]];
delay(1);
K=K<<1;
}
A[0]=SBF0; /*保存分秒各位值*/
A[1]=SBF1;
A[4]=MBF0;
A[5]=MBF1;
}
}
实验八 串行通信实验
一、实验目的
学习串行口方式1的 23、工作方式。
二、实验内容
掌握串行口方式1的工作方式及编程方法,调试程序。
三、实验程序
#include 24、nsigned int ms) {
uchar j;
unsigned int i;
for(i=0;i 25、ile(1) {
if(TI) {
SBUF=table[i];
i+=1;
if(i==18) {
i=0;
}
}
TI=0;
break;
}
while(1) {
if(RI) {
*L=SBUF;
break;
}
}
RI=0;
delay(500);
}
main() {
*L=0x00;
delay(100);
initial();
while(1);
}
实验小结
请根据做实验的情况,写实验的体会、收获、建议。字数不限,附在实验报告后面。






