广工单片机实验报告.docx
- 文档编号:7076141
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:16
- 大小:292.34KB
广工单片机实验报告.docx
《广工单片机实验报告.docx》由会员分享,可在线阅读,更多相关《广工单片机实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
广工单片机实验报告
计算机学院计算机科学与技术专业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;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告