C51单片机实验报告 流水灯 交通灯 定时器 双机交互 时钟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4)子程序中的参数传递不出来,在网上搜索以后知道了全局变量和局部变量,并知道了“void”的作用。
5)运用“!”符号后不用再麻烦的写“key==0”,很实用
指导老师签字:
日期:
实验三双机通信实验
一、实验目的
1)UART 串行通信接口技术应用
二、实验实现的功能
1)用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。
程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ko1=P3^6;
sbit ko2=P3^7;
sbit ki1=P0^5;
sbit ki2=P0^6;
sbit ki3=P0^7;
sfr P1M1=0x91;
三、双机通信实验
1、实验目的
UART串行通信接口技术应用
2、完成功能要求
用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。
四、交通灯实验
1、实验目的
1)按键、数码管、发光二极管综合应用编程技术
2)数据存储于EEPROM的技术(也可以不使用)
3)定时中断技术
4)按键中断技术
2、完成功能要求
ki2=1;
ki3=1;
if(!ki1||!ki2||!ki3)
{
Delay10ms();if(!ki1||!ki2||!ki3)
b+=1;
while(!ki1||!ki2||!ki3);
}
}
}
}
}
实验二 定时器时钟实验
最终实现:上电后设置定时时间,按2号键时间+1,按3号键时间+100;按1号键开始工作;时间到偶小灯闪烁3下,回到初始状态。
3)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。再按该键,恢复正常显示。
三、系统硬件设计
1)如单片机核心板所示的硬件电路。
四、系统软件设计
设计思路:
1)该实验较麻烦,但是有实验一和实验二做铺垫思路也是很清晰地;
2)交通灯为南北通东西停——等待——东西通南北停——等待——南北通东西停……依次循环,所以应该设计一个周期包含以上四步;
5)将以上思想汇总,编程,实现功能。程序详见附录。
五、实验过程中遇到的问题及解决方法
1)最开始的时钟和秒表都没有用计时器和中断,但是也达到了实验要求,最后又改用始终计时器,浪费了很多时间。
2)不知道怎么使数码管显示不同数字,从网上学到用动态扫描来显示。
3)认真学习了中断技术并运用之后,切实意识到中断技术是单片机的核心技术,数码管显示也变得简单和稳定了。
3)在急停之后如何出循环成为一个很大的困惑,最后运用了“while”循环解决了。
4)发现用子程序以后会使程序简明不少。
指导老师签字:
日期:
附录:
实验一 流水灯实验
最终实现:按任意键反向,只是必须等到一轮结束以后。
程序如下:
#include<reg52.h>
#define uchar unsigned char
3)计数器工作时比较计数器的值和所设定的置,确定范围,确定该范围内显示的灯的种类;
4)对于急停的情况,应该在每秒都检测一下键盘,如果键盘有输入,中断,执行全部红灯的程序;
5)关于跳出急停程序,用“while“循环和”if“语句实现;
6)红绿灯和黄灯的显示时间在程序最开始计数器未开始工作室设定两个数的值;
指导老师签字:
日期:
实验二定时器或实时时钟实验
一、实验目的
1)数码管动态显示技术
2)定时器的应用
3)按键功能定义
二、实验实现的功能
1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。
2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。
do
{
while (--j);
} while (--i);
}
void flick()
{
uchar d;
while(d<=2)
{
P2=0x00;
P3=0xc3;
Delay900ms();
P2=0xff;
P3=0xff;
Delay900ms();
d++;
}
}
void main()
{
uchar b,y,n;
二、定时器或实时时钟实验
1、实验目的
1)数码管动态显示技术
2)定时器的应用
3)按键功能定义
2、完成功能要求
1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。
2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。
上述二个功能至少完成一种功能。
tab3[]={0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
tab4[]={0x1f,0x2f,0x37,0x3b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
void Delay900ms()//@11.0592MHz
3)简单按键输入捕获判断
二、实验实现的功能
1)开机是点亮12发光二极管,闪烁三下
2)按照顺时针循环依次点亮发光二极管
3)通过按键将发光二极管的显示改为顺逆时针方式
三、系统硬件设计
1)如单片机核心板所示的硬件电路。
四、系统软件设计
设计思路:
1)定义数组使得调用数组可以使led灯能够顺时针和逆时针显示;
sbΒιβλιοθήκη Baidut ko1=P3^6;
sbit ko2=P3^7;
sbit ki1=P0^5;
sbit ki2=P0^6;
sbit ki3=P0^7;
tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff};
tab2[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3b,0x37,0x2f,0x1f};
do
{
while (--j);
} while (--i);
}
void flick()
{
uchar d;
while(d<=2)
{
P2=0x00;
P3=0xc3;
Delay100ms();
P2=0xff;
P3=0xff;
Delay100ms();
d++;
}
}
void show()
{
char j;
switch(j)
Delay10ms();
if(!ki1||!ki2||!ki3)
b+=1;
while(!ki1||!ki2||!ki3);
}
}
}
if(y==0)
{
uchar x;
for(x=0;x<12;x++)
{
P2=tab1[x];
P3=tab2[x];
Delay900ms();
ko1=0;
ko2=0;
ki1=1;
8)将以上思想汇总,编程,实现功能。程序详见附录。
五、实验过程中遇到的问题及解决方法
1)对UART技术不了解,看书和视频以后有了初步了解。
2)按照课本上的程序模仿之后发现可以接收不能发送,认真查询程序发现了在利用数码管显示时将“P0=0XF7”直接将按键检测端口置高,按键无效了。
3)解决问题二之后还是不能发送数据,最后检查发现直接用“IF(TI)”不能有效地开通发送标志位,所以用了先将初值赋值给一个数,检测之后比较,并用比较结果进入发送允许,最后实现。
指导老师签字:
日期:
实验四交通灯试验
一、实验目的
1)按键、数码管、发光二极管综合应用编程技术
2)数据存储于EEPROM的技术(也可以不使用)
3)定时中断技术
4)按键中断技术
二、实验实现的功能
1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。
2)设定参数掉电后不丢失(如果不使用EEPROM,此功能可以不实现)。
上述二个功能至少完成一种功能。
三、系统硬件设计
1)如单片机核心开发板所示的硬件电路。
四、系统软件设计
设计思路:
1)做的是秒表定时器的实验;
2)利用中断技术实现利用单片机定时器完成计时功能;
3)定时器1计时中断程序每隔0.001s中断一次并当作一个计数,则1000次中断为1秒,然后十进制进位即可;
4)在程序开始计数器不工作时设定一个值,当计数器工作时将时间与设定时间比较,如果想等,计数器停止工作,小灯闪烁三下;
2)对于C语言的很多东西都不知道,语句的用法也不清楚,重新看了C语言,用到什么看什么很快就懂了。
3)主程序中没有用延时程序和死循环导致led不能点亮,请教同学以后才知道。
4)对于按键只是不了解,看书又很模糊,看了网上“KINGST工作室”也就是“手把手教你学单片机”的视频后很清楚明了,之后好多东西也是从上边学到,就不再赘述了。
{
case 0:P0=tab2[j];j++;P1=tab1[tab3[0]];break;
case 1:P0=tab2[j];j++;P1=tab1[tab3[1]];break;
case 2:P0=tab2[j];j++;P1=tab1[tab3[2]];break;
case 3:P0=tab2[j];j=0;P1=tab1[tab3[3]];break;
1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。
2)设定参数掉电后不丢失(如果不使用EEPROM,此功能可以不实现)。
3)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。再按该键,恢复正常显示。
实验一流水灯实验
一、实验目的
1)简单I/O引脚的输出
2)掌握软件延时编程方法
2)将按键的输入端全部置零,做单独按键使用;
3)利用“while”循环使得数码管可以闪烁三下;
4)利用“for”循环使得小灯能够依次点亮一个周期;
5)将以上思想汇总,编程,实现功能。程序详见附录。
五、实验过程中遇到的问题及解决方法
1)刚开始不知道怎样只设置一个管脚(如P0^0),查阅相关资料后知道表示方法,并学会了用“sbit”语句定义,方便多了。
{
unsigned char i, j, k;
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay5ms()//@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
sfr P1M0=0x92;
tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
tab2[]={0xf7,0xfb,0xfd,0xfe};
tab3[4]={0};
uint a=0;
uint b=0;
void Delay100ms()//@11.0592MHz
flick();
while(1)
{
n=b;
y=(n%2);
if(y==1)
{
uchar x;
for(x=0;x<12;x++)
{
P2=tab3[x];
P3=tab4[x];
Delay900ms();
ko1=0;
ko2=0;
ki1=1;
ki2=1;
ki3=1;
if(!ki1||!ki2||!ki3)
{
学 号:31100800
班 级:自动化10班
姓 名:张
指导老师:胡
2012.12
单片机核心板实验要求
一、流水灯实验
1、实验目的:
1)简单I/O引脚的输出
2)掌握软件延时编程方法
3)简单按键输入捕获判断
2、完成功能要求
1)开机是点亮12发光二极管,闪烁三下
2)按照顺时针循环依次点亮发光二极管
3)通过按键将发光二极管的显示改为顺逆时针方式
{
unsigned char i, j, k;
i = 13;
j = 156;
k = 83;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay10ms()//@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
7)将以上思想汇总,编程,实现功能。程序详见附录。
五、实验过程中遇到的问题及解决方法
1)该实验是一个综合性较强的实验,不过由于有实验一,实验二的铺垫,在技术上遇到的问题已经很少了,但是还是遇到一些问题。
2)最开始的时钟和秒表都没有用计时器和中断,但是也达到了实验要求,最后又改用始终计时器,浪费了很多时间。
三、系统硬件设计
1)如单片机核心板所示的硬件电路。
四、系统软件设计
设计思路:
1)该实验不对端口进行复杂操作,所以实验较简单;
2)设定波特率并计算出“TH1”和”TL1”的值;
3)对单片机进行初始化;
4)通过键盘扫面程序读出按下降的键并给予相关的编号;
5)输出编号;
6)读入数过来的值;
7)在数码管上显示;
default:break;
}
}
void interrupt_timer1() interrupt 3
相关文档
最新文档