广工单片机实验报告Word文档下载推荐.docx
《广工单片机实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《广工单片机实验报告Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
![广工单片机实验报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/10/1dbbc45b-6ed4-4f00-9a61-21db822686a3/1dbbc45b-6ed4-4f00-9a61-21db822686a31.gif)
ucharcodefun[]={0xfe,0x7f,0x01};
voiddelay()//延时函数
{
uchari,j;
for(i=0;
i<
250;
i++)
for(j=0;
j<
j++);
}
voidfun1()//逐个点亮、熄灭
{
ucharj,i=0;
uchartemp;
temp=fun[i];
for(j=0;
8;
j++)
P0=temp;
temp=temp<
<
1;
temp|=0x01;
delay();
}
P0=0xff;
temp=fun[i];
P1=temp;
P1=0xff;
P2=temp;
P2=0xff;
P3=temp;
P3=0xff;
voidfun2()//逐个点亮,最后全部点亮
ucharj,i=1;
temp=temp>
>
voidfun3()//逐次熄灭
ucharj,i=2;
temp=0x00;
P0=temp;
P1=temp;
P2=temp;
P3=temp;
voidmain()//主函数
while
(1)
fun1();
fun2();
fun3();
}
计算机学院计算机科学与技术专业5班学号3110006054
姓名谭威协作者______________教师评定______________
实验题目定时器实验
1.实验目的:
1.学习80c51单片机的定时器的使用和编程。
2.熟悉定时器中断处理程序的编程。
3.掌握编写数据处理程序。
4.掌握具体的单片机嵌入式系统的软硬件设计方法。
1.打开ISISProfessional,参照“实验电路”设计仿真电路原理图。
2.编写程序实现:
(1)计时监督百分之一秒的田径比赛电子计时器。
(2)计时精度百分之一秒的篮球比赛电子计时器。
(3)计时精度1ms的电子计时器,可实现正在计时和倒计时。
要求:
按“启动”按钮后,计时器开始工作;
安“暂停\继续”按钮后,计时器停止计时,再按“暂停\继续”按钮后,计时器在此基础上开始计时;
按“清0”|按钮后,计时器变0;
按“退出”按钮后,退出计时器模式。
四.实验源代码:
#include<
reg51.h>
#include"
miao_code.h"
//--------------------------
//延时函数xms
voiddelayms(uintxms)
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=110;
j>
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==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
//重新装载初值
if(packet==0)millisecond++;
if(packet==1)millisecond--;
计算机学院计算机科学与技术专业5班学号3110006054
姓名谭威协作者______________教师评定_________________
实验题目键盘与显示实验
1.学习并掌握行列式肩旁的设计方法和工作原理。
2.掌握单片机系统行列式键盘驱动程序的编写方法。
3.学习并掌握LED数码管的接口设计。
4.掌握多位LED数码管动态扫描显示驱动程序的编写方法。
二.实验内容:
1.打开ISIS7Professional,参照“实验电路”设计仿真电路原理图。
(1)两步扫描判别法识别16个按键,并讲获取的键值在数码管上的显示。
(2)将16个按键的13个定义为:
0~9、取消、设置、确认。
设单片机所用晶振为12MHz,编写程序实现电子钟,上电启动后初始时钟为09年3月20日。
用户可自由修改时钟,修改方法如下:
按【设置】键,然后依次输入时分秒(HHMMSS)。
按【确认】键确认修改,之前任何一步按【取消】键,退出修改。
code.h"
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;
//年月日显示函数
voiddisplay_date(uinti,uintnum)
P2=table2[i];
P0=table[num];
delayms(5);
//---------------------------
//键盘控制函数
voidkey_scan()//定位每一个按键值
//列扫描
P1=0xf0;
delayms
(1);
temp=P1>
4^0x0f;
switch(temp)
case1:
key=0;
break;
case2:
key=1;
case4:
key=2;
case8:
key=3;
default:
key=16;
//行扫描
P1=0x0f;
temp=P1^0x0f;
key+=0;
key+=4;
key+=8;
key+=12;
//数码管显示
for(i=0;
8;
display_date(i,date[i]);
//扫描键盘获取按键序号key
P1=0xf0;
if(P1!
=0xf0)key_scan();
switch(key)
case0:
if(label==1)date[j++]=7;
delayms(200);
case1:
if(label==1)date[j++]=8;
case2:
if(label==1)date[j++]=9;
case4:
if(label==1)date[j++]=4;
case5:
if(label==1)date[j++]=5;
case6:
if(label==1)date[j++]=6;
case7:
if(j==0){date[0]=extra_date[0];
else{date[j--]=extra_date[j];
date[j]=10;
}delayms(200);
case8:
if(label==1)date[j++]=1;
case9:
if(label==1)date[j++]=2;
case10:
if(label==1)date[j++]=3;
case11:
date[j]=10;
j=0;
label=1;
case12:
if(label==1)date[j++]=0;
case15:
j=0;
label=0;
if(label==1&
&
j!
=0)date[j]=10;
key=16;