• 语文科
  • 数学科
  • 英语科
  • 政治科
  • 物理科
  • 化学科
  • 地理科
  • 历史科
  • 生物科
  • 中考备战
  • 高考备战
  • 高考试题
  • 中考试题
  • 当前位置: 天一资源网 > 双机 正文

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

    时间:2020-07-22 12:59:01 来源:天一资源网 本文已影响 天一资源网手机站

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

     学 号:班 级: 自动化 10 班 姓 名: 张 指导老师: 胡

     2019.12

     单片机核心板实验要求

     一、 流水灯实验

     、 实验目的:

     ) 简单 I/O 引脚的输出 2 ) 掌握软件延时编程方法 3 ) 简单按键输入捕获判断 2 、 完成功能要求

     ) 开机是点亮 12 发光二极管,闪烁三下 2 ) 按照顺时针循环依次点亮发光二极管

     3 ) 通过按键将发光二极管的显示改为顺逆时针方式

     二、 定时器或实时时钟实验

     、 实验目的) 数码管动态显示技术 2 ) 定时器的应用 3 ) 按键功能定义 2 、 完成功能要求

     ) 通过按键可以设定定时时间,启动定时器,定时时间到,让 12 个发光二极管闪烁,完成定时器功能。

     ) 实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别

     显示分钟和秒)。

     上述二个功能至少完成一种功能。

     三、 双机通信实验

     1 、 实验目的UART 串行通信接口技术应用 2 、 完成功能要求

     用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

     四、 交通灯实验

     1 、 实验目的1 )按键、数码管、发光二极管综合应用编程技术 2 )数据存储于EEPRO的技术

     (也可以不使用) 3 ) 定时中断技术 4 ) 按键中断技术 2 、 完成功能要求

     ) 对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。

     )设定参数掉电后不丢失(如果不使用 EEPRO,此功能可以不实现)。

     ) 紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通 过。再按该键,恢复正常显示。

     实验一 流水灯实验

     一、实验目的 1 ) 简单 I/O 引脚的输出 2 ) 掌握软件延时编程方法 3 ) 简单按键 输入捕获判断 二、实验实现的功能 1 ) 开机是点亮 12发光二极管,闪烁三下 2 ) 按照 顺时针循环依次点亮发光二极管 3 ) 通过按键将发光二极管的显示改为顺逆时针方式 三、

     系统硬件设计

     1 )如单片机核心板所示的硬件电路。

     四、系统软件设计

     设计思路:

     1 )定义数组使得调用数组可以使 led 灯能够顺时针和逆时针显示; 2 )将按键的输 入端全部置零,做单独按键使用; 3 )利用“ while ”循环使得数码管可以闪烁三下;

     )利用“ for ”循环使得小灯能够依次点亮一个周期; 5 )将以上思想汇总,编程, 实现功能。程序详见附录。

     五、实验过程中遇到的问题及解决方法

     1 )刚开始不知道怎样只设置一个管脚(如 POP),查阅相关资料后知道表示方法,

     并学会了用“ sbit ”语句定义,方便多了。

     2)对于C语言的很多东西都不知道,语句的用法也不清楚,重新看了 C语言,用到什

     么看什么很快就懂了。

     )主程序中没有用延时程序和死循环导致 led 不能点亮,请教同学以后才知道。

     4 ) 对于按键只是不了解,看书又很模糊,看了网上“ KINGST 工作室”也就是“手把手教你学 单片机”的视频后很清楚明了,之后好多东西也是从上边学到,就不再赘述了。

     指导老师签字: 日期:

     实验二 定时器或实时时钟实验

     一、实验目的 1 ) 数码管动态显示技术 2 ) 定时器的应用 3 ) 按键功能定义 二、 实验实现的功能 1 ) 通过按键可以设定定时时间,启动定时器,定时时间到,让 12个发

     光二极管闪烁,完成定时器功能。

     2 ) 实时时钟,可以设定当前时间,完成钟表功能 (四位数码管分别显示分钟和秒)。

     上述二个功能至少完成一种功能。

     三、系统硬件设计

     1 )如单片机核心开发板所示的硬件电路。

     四、系统软件设计 设计思路:

     1 )做的是秒表定时器的实验;

     )利用中断技术实现利用单片机定时器完成计时功能;

     )定时器 1 计时中断程序每隔 0.001s 中断一次并当作一个计数,则 1000 次中断为

     1 秒,然后十进制进位即可;

     )在程序开始计数器不工作时设定一个值,当计数器工作时将时间与设定时间比较, 如果想等,计数器停止工作,小灯闪烁三下; 5 )将以上思想汇总,编程,实现功能。程 序详见附录。

     五、实验过程中遇到的问题及解决方法

     1 )最开始的时钟和秒表都没有用计时器和中断,但是也达到了实验要求,最后又改 用始终计时器,浪费了很多时间。

     )不知道怎么使数码管显示不同数字,从网上学到用动态扫描来显示。

     )认真学习了中断技术并运用之后,切实意识到中断技术是单片机的核心技术,数 码管显示也变得简单和稳定了。

     )子程序中的参数传递不出来,在网上搜索以后知道了全局变量和局部变量,并知 道了“ void ”的作用。

     )运用“!”符号后不用再麻烦的写“ key==0”, 很实用

     指导老师签字:

     实验三 双机通信实验

     一、实验目的1 )UART 串行通信接口技术应用 二、实验实现的功能

     1 )用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

     三、系统 硬件设计

     1 )如单片机核心板所示的硬件电路。

     四、系统软件设计 设计思路:

     1 )该实验不对端口进行复杂操作,所以实验较简单; 2 )设定波特率并计算出“ TH1” 和” TL1”的值;3)对单片机进行初始化;

     4 )通过键盘扫面程序读出按下降的键并给予相关的编号; 5 )输出编号 ;

     6) 读入数过来的值; 7) 在数码管上显示;

     8 )将以上思想汇总,编程,实现功能。程序详见附录。

     五、实验过程中遇到的问题 及解决方法

     )对UART技术不了解,看书和视频以后有了初步了解。

     )按照课本上的程序模仿之后发现可以接收不能发送,认真查询程序发现了在利用

     数码管显示时将“ P0=0XF7直接将按键检测端口置高,按键无效了。 3 )解决问题二之

     后还是不能发送数据,最后检查发现直接用“ IF(TI) ”不能有效地开通发送标志位,所以 用了先将初值赋值给一个数,检测之后比较,并用比较结果进入发送允许,最后实现。

     指导老师签字:

     实验四 交通灯试验

     一、实验目的 1 ) 按键、数码管、发光二极管综合应用编程技术 2) 数据存储于 EEPRO的技术(也可以不使用) 3)定时中断技术4 )按键中断技术 二、实验实现的 功能 1 ) 对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。 2 ) 设定参

     数掉电后不丢失(如果不使用 EEPRO,M 此功能可以不实现)。

     3 ) 紧急按键功能,当按 下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。再按该键,恢复正常显示。

     三、系统硬件设计

     1 )如单片机核心板所示的硬件电路。

     四、系统软件设计 设计思路:

     )该实验较麻烦,但是有实验一和实验二做铺垫思路也是很清晰地;

     )交通灯为南北通东西停——等待——东西通南北停——等待——南北通东西停 ,, 依次循环,所以应该设计一个周期包含以上四步;

     )计数器工作时比较计数器的值和所设定的置,确定范围,确定该范围内显示的灯 的种类;

     )对于急停的情况,应该在每秒都检测一下键盘,如果键盘有输入,中断,执行全 部红灯的程序;

     )关于跳出急停程序,用“ while “循环和” if “语句实现; 6 )红绿灯和黄灯的显

     示时间在程序最开始计数器未开始工作室设定两个数的值; 7)将以上思想汇总,编程,

     实现功能。程序详见附录。

     五、实验过程中遇到的问题及解决方法

     1 )该实验是一个综合性较强的实验,不过由于有实验一,实验二的铺垫,在技术上 遇到的问题已经很少了,但是还是遇到一些问题。

     2 )最开始的时钟和秒表都没有用计时器和中断,但是也达到了实验要求,最后又改 用始终计时器,浪费了很多时间。

     )在急停之后如何出循环成为一个很大的困惑,最后运用了“ while ”循环解决了

     )发现用子程序以后会使程序简明不少。

     指导老师签字:

     附录:

     实验一 流水灯实验

     最终实现:按任意键反向,只是必须等到一轮结束以后。

     程序如下:

     #include

     #define uchar unsigned char

     sbit ko 仁P3W; sbit ko2=P3A7; sbit ki 仁戸0人5; sbit ki2=P0A6; sbit ki3=P0A7;

     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};

     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 { 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; do { while (--j);

     } while (--i); }

     void flick() { uchar d; while(d

     void main() { uchar b,y,n; flick(); while(1) { n=b; y=(n%2); if(y==1)

     { uchar x; for(x=0;x

     ko2=0; ki1=1; ki2=1; ki3=1; if(!ki1||!ki2||!ki3) { Delay10ms(); if(!ki1||!ki2||!ki3) b+=1;

     while(!ki1||!ki2||!ki3); } }

     } if(y==0) { uchar x; for(x=0;x

     实验二 定时器时钟实验

     最终实现:上电后设置定时时间,按 2号键时间 +1,按 3号键时间 +100;按 1号键开 始工作;时间到偶小灯闪烁 3 下,回到初始状 {

     unsigned char i, j; i = 54; j = 199; do { 态。

     程序如下:

     #include

     #define uchar unsigned char #define uint unsigned int

     sbit ko 仁P3W; sbit ko2=P3A7; sbit ki 仁戸0人5; sbit ki2=P0A6; sbit ki3=P0A7;

     sfr P1M1=0x91; 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 { unsigned char i, j, k; i = 5; j = 52; k

     = 195; do { do { while (--k); } while (--j); } while (--i); }

     void Delay5ms() //@11.0592MHz

     while (--j); } while (--i); }

     void flick() { uchar d; while(d

     void show() {

     char j; switch(j) { 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; default:break; } }

     void interrupt_timer1() interrupt 3

     { TH1=0xfc; TL1=0x67; a++; if(a==1000) { b++; a=0; tab3[0]=b%10;

     tab3[1]=b/10%10; tab3[2]=b/100%10; tab3[3]=b/1000%10; } show(); }

     void main() { uchar m,k; uint n=1; P1M1=0x00; P1M0=0xff; TMOD=0x10;

     TH1=0xfc; TL1=0x67; ET1=1; EA=1; while(1) { if(!TR1) { k=0; for(k=0;k

     }

     }

     { TR1=1; break; } while(!ki1); } if(!ki2) { Delay5ms(); if(!ki2) n+=1;

     while(!ki2); } if(!ki3) { Delay5ms(); if(!ki3) n+=100; while(!ki3); } tab3[0]=n%10; tab3[1]=n/10%10; tab3[2]=n/100%10; tab3[3]=n/1000%10; for(m=0;m

     if(b==n) { TR1=0; b=0; n=1; flick(); }

     实验三 双机通信实验

     最终实现:两机连接后按任意键可在两外的 机子上显示该键编号。

     程序如下:

     #include

     #define uchar unsigned char #define uint unsigned int

     sfr P1M1=0x91; sfr P1M0=0x92;

     sbit ko 仁P3W; sbit ko2=P3A7; sbit ki 仁戸0人5; sbit ki2=P0A6; sbit ki3=P0A7;

     sbit scran=戸0人3;

     tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d ,0x07,0x7f,0x6f};

     uchar a,b,n;

     void Delay5ms() //@11.0592MHz { unsigned char i, j; i = 54; j = 199; do

     { while (--j); } while (--i); }

     void main() { SCON=0xd0; TMOD=0x20; PCON=0x00; TH1=0xf4;

     TL1=0xf4; TR1=1; scran=0; while(1) { n=a; ko1=0; ko2=1; ki1=1; ki2=1;

     ki3=1; if(!ki1) {

     } if(!ki2) { } if(!ki3) { }

     ko1=1; ko2=0; ki1=1; ki2=1; ki3=1; if(!ki1) {

     Delay5ms(); if(!ki1) a=1;

     while(!ki1);

     Delay5ms(); if(!ki2) a=2;

     while(!ki2);

     Delay5ms(); if(!ki3) a=3;

     while(!ki3);

     Delay5ms(); if(!ki1) a=4;

     while(!ki1);

     if(!ki2) { Delay5ms(); if(!ki2) a=5; while(!ki2); } if(!ki3) { Delay5ms(); if(!ki3) a=6; while(!ki3); } if(a!=n) { SBUF=a; while(!TI); TI=0; } if(RI) { b=SBUF; RI=0; }

     P1=tab1[b];

     }

     }

     实验四 交通灯实验

     3 号键增加黄灯时间,3、4、 5任意键继续(从最终实现:上电之后进行初始设置, 2 号键增加红绿灯时间, 初始时间都为零; 1 号键开始工作;按 3、

     3 号键增加黄灯时间,

     3、4、 5任意键继续(从

     tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

     tab2[]={0xf7,0xfb,0xfd,0xfe}; tab3[4]={0};

     第一步开始。

     程序如下:

     #include

     #define uchar unsigned char #define uint unsigned int

     void led_show();

     uchar m,n; uint a=0; uint b=0;

     uchar k,c,d,f,g;

     sfr P1M1=0x91; sfr P1M0=0x92;

     sbit ko 仁P3W; sbit ko2=P3A7; sbit ki 仁戸0人5; sbit ki2=P0A6; sbit ki3=P0A7;

     sbit dh=P2A2; sbit dl=P2A0; sbit dy=P2Al;

     sbit xh=P3A2; sbit xl=P2A6; sbit xy=P2A7;

     sbit nh=P2A5; sbit nl=P2A3; sbit ny=P2A4;

     sbit bh=P3A5; sbit bl=P3A3;

     void show() { char j; switch(j) {

     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; default:break; } }

     void Delay5ms() //@11.0592MHz { unsigned char i, j; i = 54; j = 199; do

     { while (--j); } while (--i); }

     void interrupt_timer1() interrupt 3 { TH1=0xfc; TL1=0x67; a++; if(a==1000)

     { b++; a=0; } if(b=0) { tab3[0]=(m-b)%10;

     tab3[1]=(m-b)/10%10; tab3[2]=(m-b)/100%10; tab3[3]=(m-b)/1000%10; } if(b=m) { tab3[0]=(d-b)%10; tab3[1]=(d-b)/10%10; xh=0;

     bh=0; while(!ki1||!ki2||!ki3); while(ki1) { if(!ki1||!ki2||!ki3)

     { while(!ki1||!ki2||!ki3); tab3[2]=(d-b)/100%10; tab3[3]=(d-b)/1000%10; } if(b=d) { tab3[0]=(f-b)%10; tab3[1]=(f-b)/10%10; tab3[2]=(f-b)/100%10; tab3[3]=(f-b)/1000%10; } if(b=f) { tab3[0]=(g-b)%10; tab3[1]=(g-b)/10%10; tab3[2]=(g-b)/100%10; tab3[3]=(g-b)/1000%10; } show(); }

     void det() { ko1=1; ko2=0; ki1=1; ki2=1; ki3=1; if(!ki1||!ki2||!ki3)

     { Delay5ms(); if(!ki1||!ki2||!ki3) { P2=0xdb; bl=1; by=1;

     b=0; break; } } } } }

     void led_show() { while(1) { dl=1; xl=1; nl=1; bl=1; dh=1; xh=1; nh=1;

     bh=1; dy=1; xy=1; ny=1; by=1; d=(m+n); f=(2*m+n); g=(2*m+2*n); if(b=0) { dl=0; xl=0; nl=1; bl=1; dh=1; xh=1; nh=0;

     // 东西通

     bh=0; dy=1; xy=1; ny=1; by=1; det(); }

     if(b=m) { dl=1; xl=1; nl=1; bl=1; dh=1; xh=1; nh=1; bh=1; dy=0; xy=0; ny=0; by=0; det(); }

     if(b=d) { dl=1; xl=1; nl=0; bl=0; dh=0; xh=0; nh=1; bh=1; dy=1; xy=1; ny=1; by=1; det(); }

     if(b=f) { dl=1; xl=1; nl=1;

     // 黄

     // 南北通 // 黄

     bl=1;

     dh=1; xh=1; nh=1; bh=1; dy=0; xy=0; ny=0; by=0; det(); } if(b==g) b=0; } }

     void main() { P1M1=0x00; P1M0=0xff; TMOD=0x10; TH1=0xfc; TL1=0x67; ET1=1; EA=1; TR1=0; while(1) { if(!TR1) { k=0; for(k=0;k

     led_show(); }

     while(!ki1); }

     if(!ki2) { Delay5ms(); if(!ki2) m+=1; while(!ki2); }

     if(!ki3) { Delay5ms(); if(!ki3)

     n+=1; while(!ki3); } tab3[0]=m%10; tab3[1]=m/10%10; tab3[2]=n%10; tab3[3]=n/10%10; for(c=0;c

    相关关键词: 双机
    相关热词搜索: 双机 交通灯 定时器 单片机 时钟

    • 范文大全
    • 教案下载
    • 优秀作文
    • 励志
    • 课件
    • 散文
    • 名人名言