广工单片机实验报告.docx

上传人:b****6 文档编号:7076141 上传时间:2023-01-17 格式:DOCX 页数:16 大小:292.34KB
下载 相关 举报
广工单片机实验报告.docx_第1页
第1页 / 共16页
广工单片机实验报告.docx_第2页
第2页 / 共16页
广工单片机实验报告.docx_第3页
第3页 / 共16页
广工单片机实验报告.docx_第4页
第4页 / 共16页
广工单片机实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

广工单片机实验报告.docx

《广工单片机实验报告.docx》由会员分享,可在线阅读,更多相关《广工单片机实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

广工单片机实验报告.docx

广工单片机实验报告

计算机学院计算机科学与技术专业5班学号3110006054

姓名谭威协作者______________教师评定________________

实验题目单片机I/O口—流水灯实验

一.实验目的:

1.学习单片机各I/O口的结构特点及相关寄存器的使用方法。

2.掌握一个简单的具体的单片机项目的开发流程。

3.了解ProteusISIS软件及实用方法。

4.熟悉ProteusISIS与uVision2IDE的开发环境的互连调试。

2.实验内容:

1.打开ISISProfessional,参照“实验电路”绘制仿真电路的原理图。

2.编程实现:

(1)从VD1~VD32逐次点亮每个LED,然后熄灭。

每个LED亮灯时间约为200ms。

(2)点亮VD32,200ms后再点亮VD31····最后点亮VD1,直到全部灯被点亮。

(3)在全部灯亮的情况下,从VD1~VD32逐次熄灭LED,熄灭VD1,延时200ms;然后熄灭VD2,延时200ms····熄灭VD32,全部灯被熄灭。

(4)重复上述过程。

3.实验电路:

4.实验源程序:

#include//片内寄存器定义

#defineucharunsignedchar

#defineuintunsignedint

ucharcodefun[]={0xfe,0x7f,0x01};

voiddelay()//延时函数

{

uchari,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++);

}

voidfun1()//逐个点亮、熄灭

{

ucharj,i=0;

uchartemp;

temp=fun[i];

for(j=0;j<8;j++)

{

P0=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P0=0xff;

temp=fun[i];

for(j=0;j<8;j++)

{

P1=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P1=0xff;

temp=fun[i];

for(j=0;j<8;j++)

{

P2=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P2=0xff;

temp=fun[i];

for(j=0;j<8;j++)

{

P3=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P3=0xff;

}

voidfun2()//逐个点亮,最后全部点亮

{

ucharj,i=1;

uchartemp;

temp=fun[i];

for(j=0;j<8;j++)

{

P3=temp;

temp=temp>>1;

delay();

}

temp=fun[i];

for(j=0;j<8;j++)

{

P2=temp;

temp=temp>>1;

delay();

}

temp=fun[i];

for(j=0;j<8;j++)

{

P1=temp;

temp=temp>>1;

delay();

}

temp=fun[i];

for(j=0;j<8;j++)

{

P0=temp;

temp=temp>>1;

delay();

}

}

voidfun3()//逐次熄灭

{

ucharj,i=2;

uchartemp;

temp=0x00;

P0=temp;

P1=temp;

P2=temp;

P3=temp;

temp=fun[i];

for(j=0;j<8;j++)

{

P0=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P0=0xff;

temp=fun[i];

for(j=0;j<8;j++)

{

P1=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P1=0xff;

temp=fun[i];

for(j=0;j<8;j++)

{

P2=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P2=0xff;

temp=fun[i];

for(j=0;j<8;j++)

{

P3=temp;

temp=temp<<1;

temp|=0x01;

delay();

}

P3=0xff;

}

voidmain()//主函数

{

while

(1)

{

fun1();

fun2();

fun3();

}

}

计算机学院计算机科学与技术专业5班学号3110006054

姓名谭威协作者______________教师评定______________

实验题目定时器实验

1.实验目的:

1.学习80c51单片机的定时器的使用和编程。

2.熟悉定时器中断处理程序的编程。

3.掌握编写数据处理程序。

4.掌握具体的单片机嵌入式系统的软硬件设计方法。

2.实验内容:

1.打开ISISProfessional,参照“实验电路”设计仿真电路原理图。

2.编写程序实现:

(1)计时监督百分之一秒的田径比赛电子计时器。

(2)计时精度百分之一秒的篮球比赛电子计时器。

(3)计时精度1ms的电子计时器,可实现正在计时和倒计时。

要求:

按“启动”按钮后,计时器开始工作;安“暂停\继续”按钮后,计时器停止计时,再按“暂停\继续”按钮后,计时器在此基础上开始计时;按“清0”|按钮后,计时器变0;按“退出”按钮后,退出计时器模式。

3.实验电路:

四.实验源代码:

#include

#include"miao_code.h"

#defineuintunsignedint

#defineucharunsignedchar

//--------------------------

//延时函数xms

//--------------------------

voiddelayms(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

//--------------------------

//各变量定义

//--------------------------

uintminute=0,second=0,millisecond=0;//定义分,秒,毫秒

ucharpacket=0;//计数模式选择:

0为正计时,1为倒计时

sbitstart=P0^0;//启动项

sbitpause=P0^1;//暂停项

sbitclear=P0^2;//清零项

sbitquit=P0^3;//退出项

//--------------------------

//数码管显示函数

//--------------------------

voiddisplay()

{

P3=table1[minute/10]|table[minute%10];

P2=table1[second/10]|table[second%10];

P1=table1[millisecond/10]|table[millisecond%10];

}

//--------------------------

//定时器初始化

//--------------------------

voidinit()

{

//确定模式此处一上电便是0x00故而可以省略

TMOD=0x01;

//装载初值

TH0=0xd8;

TL0=0xf0;

//开启中断

EA=1;

ET0=1;

}

//--------------------------

//键盘扫描控制函数

//--------------------------

voidkey_scan()

{

if(start==0)TR0=1;

if(pause==0)TR0=TR0^1;

if(clear==0)

{

if(packet==1){minute=second=59;millisecond=99;}

if(packet==0){minute=second=millisecond=0;}

}

if(quit==0)

{

packet=packet^1;

if(packet==1){minute=second=59;millisecond=99;}

if(packet==0){minute=second=millisecond=0;}

}

}

//--------------------------

//主函数

//--------------------------

voidmain()

{init();

while

(1)

{

if(packet==0)

{

if(millisecond==100)

{

millisecond=0;

second++;

}

if(second==60)

{

second=0;

minute++;

}

if(minute==60)minute=0;

}

if(packet==1)

{if(millisecond==0)

{

millisecond=99;

second--;

}

if(second==0)

{

second=60;

minute--;

}

if(minute==0)minute=60;

}

display();

key_scan();

}

}

//--------------------------

//中断服务程序

//--------------------------

voidT0_time()interrupt1

{

TH0=0xd8;

TL0=0xf0;//重新装载初值

if(packet==0)millisecond++;

if(packet==1)millisecond--;

}

计算机学院计算机科学与技术专业5班学号3110006054

姓名谭威协作者______________教师评定_________________

实验题目键盘与显示实验

1.实验目的:

1.学习并掌握行列式肩旁的设计方法和工作原理。

2.掌握单片机系统行列式键盘驱动程序的编写方法。

3.学习并掌握LED数码管的接口设计。

4.掌握多位LED数码管动态扫描显示驱动程序的编写方法。

二.实验内容:

1.打开ISIS7Professional,参照“实验电路”设计仿真电路原理图。

2.编写程序实现:

(1)两步扫描判别法识别16个按键,并讲获取的键值在数码管上的显示。

(2)将16个按键的13个定义为:

0~9、取消、设置、确认。

设单片机所用晶振为12MHz,编写程序实现电子钟,上电启动后初始时钟为09年3月20日。

用户可自由修改时钟,修改方法如下:

按【设置】键,然后依次输入时分秒(HHMMSS)。

按【确认】键确认修改,之前任何一步按【取消】键,退出修改。

3.实验电路:

4.实验源程序:

#include

#include"code.h"

#defineuintunsignedint

#defineucharunsignedchar

uchardate[]={2,0,1,2,1,2,0,2};//定义日期

ucharcodeextra_date[]={2,0,1,2,1,2,0,2};//辅助日期数组

uinti,j=0,key=16,label=0;

//--------------------------

//延时函数xms

//--------------------------

voiddelayms(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

//--------------------------

//年月日显示函数

//--------------------------

voiddisplay_date(uinti,uintnum)

{

P2=table2[i];

P0=table[num];

delayms(5);

}

//---------------------------

//键盘控制函数

//---------------------------

voidkey_scan()//定位每一个按键值

{

uchartemp;

//列扫描

P1=0xf0;

delayms

(1);

temp=P1>>4^0x0f;

switch(temp)

{

case1:

key=0;break;

case2:

key=1;break;

case4:

key=2;break;

case8:

key=3;break;

default:

key=16;

}

//行扫描

P1=0x0f;

delayms

(1);

temp=P1^0x0f;

switch(temp)

{

case1:

key+=0;break;

case2:

key+=4;break;

case4:

key+=8;break;

case8:

key+=12;break;

}

}

//---------------------------

//主函数

//---------------------------

voidmain()

{

while

(1)

{

//数码管显示

for(i=0;i<8;i++)

{

display_date(i,date[i]);

}

//扫描键盘获取按键序号key

P1=0xf0;

if(P1!

=0xf0)key_scan();

switch(key)

{

case0:

if(label==1)date[j++]=7;delayms(200);break;

case1:

if(label==1)date[j++]=8;delayms(200);break;

case2:

if(label==1)date[j++]=9;delayms(200);break;

case4:

if(label==1)date[j++]=4;delayms(200);break;

case5:

if(label==1)date[j++]=5;delayms(200);break;

case6:

if(label==1)date[j++]=6;delayms(200);break;

case7:

if(j==0){date[0]=extra_date[0];}

else{date[j--]=extra_date[j];date[j]=10;}delayms(200);break;

case8:

if(label==1)date[j++]=1;delayms(200);break;

case9:

if(label==1)date[j++]=2;delayms(200);break;

case10:

if(label==1)date[j++]=3;delayms(200);break;

case11:

date[j]=10;j=0;label=1;delayms(200);break;

case12:

if(label==1)date[j++]=0;delayms(200);break;

case15:

j=0;label=0;delayms(200);break;

}

if(label==1&&j!

=0)date[j]=10;

key=16;

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1