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

51单片机流水灯实验报告51单片机流水灯实验报告引言:51单片机是一种常用的微控制器,广泛应用于各种电子设备中。
流水灯实验是学习单片机编程的基础实验之一,通过控制多个LED灯的亮灭顺序,可以了解单片机的基本原理和编程方法。
一、实验目的本实验旨在通过使用51单片机,设计并实现一个简单的流水灯电路,加深对单片机原理的理解,掌握基本的单片机编程方法。
二、实验原理51单片机是一种8位微控制器,具有强大的功能和广泛的应用。
流水灯实验中,我们需要控制多个LED灯的亮灭顺序,通过编写程序,将指令发送给单片机,控制LED灯的亮灭。
三、实验器材1. 51单片机开发板2. LED灯若干3. 面包板4. 连接线四、实验步骤1. 将51单片机开发板连接到电脑上,打开开发板的编程软件。
2. 在编程软件中,新建一个工程,选择适合的单片机型号。
3. 编写程序,设置相应的引脚为输出模式,并配置流水灯的亮灭顺序。
4. 将单片机开发板与面包板连接,将LED灯连接到相应的引脚上。
5. 将编写好的程序下载到单片机中。
6. 打开电源,观察LED灯的亮灭顺序是否符合预期。
五、实验结果与分析经过实验,我们成功地实现了一个简单的流水灯电路。
LED灯按照设定的顺序亮灭,形成了流水灯的效果。
通过调整程序中的指令顺序,我们可以改变LED灯的亮灭顺序,实现不同的流水灯效果。
六、实验心得通过这次实验,我对51单片机的原理和编程方法有了更深入的了解。
流水灯实验是一种简单但基础的实验,通过实际操作和编程,加深了我对单片机的理解和掌握。
在实验过程中,我遇到了一些问题,如LED灯连接错误、程序逻辑错误等,但通过仔细检查和调试,最终成功解决了这些问题。
这次实验让我更加熟悉了单片机的应用,为以后更复杂的项目打下了基础。
七、实验拓展在掌握了基本的流水灯实验后,我们可以进一步拓展实验内容。
例如,可以增加控制开关,实现对流水灯的启停控制;可以设计不同的流水灯效果,如闪烁、变速等;还可以与其他传感器、模块进行组合,实现更多功能和效果。
单片机实训实验报告总结

一、实验背景与目的随着科技的不断发展,单片机作为一种微小的计算机系统,在工业控制、智能家居、汽车电子等领域得到了广泛的应用。
为了提高学生的实践能力和创新意识,本实训课程旨在通过实际操作,让学生掌握单片机的原理、编程和调试方法,培养学生的动手能力和团队协作精神。
本次实训以51单片机为核心,结合数码管、LED灯、按键等外围电路,设计了多个实验项目,包括LED流水灯、交通灯控制系统、简易计算器、温湿度监控系统等。
通过这些实验,使学生深入了解单片机的硬件结构和软件编程,提高学生的实际操作能力和问题解决能力。
二、实验内容与过程1. 实验一:LED流水灯(1)实验目的:掌握51单片机的I/O口编程,实现LED灯的流水效果。
(2)实验步骤:① 硬件连接:将LED灯连接到P1口;② 编写程序:使用循环语句和延时函数控制LED灯的流水效果;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察LED灯的流水效果。
2. 实验二:交通灯控制系统(1)实验目的:学习单片机在交通灯控制系统中的应用,实现红黄绿灯的变换及倒计时功能。
(2)实验步骤:① 硬件连接:将LED灯连接到P1口,按键连接到外部中断INT0;② 编写程序:设置定时器中断,实现倒计时功能;编写外部中断程序,实现红黄绿灯的变换;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察交通灯的工作状态和倒计时效果。
3. 实验三:简易计算器(1)实验目的:掌握矩阵键盘扫描原理、LCD1602显示屏控制,实现基本的四则运算。
(2)实验步骤:① 硬件连接:将矩阵键盘和LCD1602显示屏连接到单片机;② 编写程序:实现矩阵键盘扫描、LCD1602显示控制和运算逻辑处理;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察计算器的工作状态和运算结果。
4. 实验四:温湿度监控系统(1)实验目的:学习单片机在温湿度监控系统中的应用,实现温度和湿度的实时显示。
(2)实验步骤:① 硬件连接:将温度传感器和湿度传感器连接到单片机,将LED灯连接到P1口;② 编写程序:实现温度和湿度的实时采集,并根据采集到的数据控制LED灯的亮灭;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察LED灯的亮灭状态和数码管上的温度、湿度值。
单片机C51的LED流水灯实验报告

实验3.1.2 数字量输出输出扩展——LED流水灯一、实验目的1、掌握单片机外设扩展的方法2、使用单片机和8255实现LED流水灯的控制。
二、实验内容使用汇编语言编程,功能为:通过KK1脉冲实现LED灯工作方式即时控制,完成LED 开关控制显示和LED左循环、右循环、间隔闪烁功能。
三、实验环境PC机一台,Proteus仿真软件(或TD-PIT实验系统)一套四、实验硬件电路图说明:U2为单片机SST89E554RC,U1为8255A,通过8255A的PB输出使LED工作,BUTTON 为脉冲开关。
五、程序流程图六、实验程序清单ORG 0000HAJMP 0100HORG 0100HMAIN:MOV TMOD,#60H MOV TH1,#0FFHMOV TL1,#0FFHMOV DPTR,#7300HMOV A,#80HMOVX @DPTR,ASETB TR1MOV DPTR,#7100HLEFT:MOV R0,#8MOV A,#01HAG1:MOVX @DPTR,ACALL DELAYRLC ADJNZ R0,AG1JBC TF1,RIGHTAJMP LEFTRIGHT:MOV R0,#8MOV A,#80HAG2: MOVX @DPTR,ACALL DELAYRRC ADJNZ R0,AG2JBC TF1,FLASHAJMP RIGHTFLASH:MOV R0,#8AG3: MOV A,#55HMOVX @DPTR,ACALL DELAYMOV A,#0AAHMOVX @DPTR,ACALL DELAYDJNZ R0,AG3JBC TF1,LEFTAJMP FLASHDELAY:MOV R1,#0FFHDEL0:MOV R2,#0FFHDEL: DJNZ R2,$DJNZ R1,DEL0RETEND七、实验步骤1、按实验电路图接线;2、编写实验程序,编译连接无误后进入调试状态(可用PROTEUS也可以用硬件调试);3、按动BUTTON(PROTEUS下)或KK1(实验箱),观察流水灯工作情况,验证程序功能。
单片机c语言程序设计---C51-交通灯实验报告

单片机c语言程序设计---C51-交通灯实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称: C51-交通灯实验一、实验目的和要求1.熟悉单片机的硬件结构及其工作原理2.掌握单片机的C51编程二、实验内容和原理(1)硬件设计使用P1端口连接VD1、VD2、VD3,模拟路口东面的红、黄、绿灯;P0端口连接VD9、VD10、VD11,模拟路口西面的红、黄、绿灯;P3端口连接VD17、VD18、VD19,模拟路口南面的红、黄、绿灯;P2端口连接VD25、VD26、VD27,模拟路口北面的红、黄、绿灯。
路口红绿灯的显示规律为:①南面和北面显示红灯(即VD17和VD25为红灯)时,东面和西面显示绿灯(即VD3和VD11为绿灯)。
②南面和北面,东面和西面都变成黄灯。
③南面和北面显示绿灯,东面和西面显示红灯④南面和北面,东面和西面都变成黄灯,然后再从①进行循环(需注意:此处设置的黄灯显示时长应短于红灯或绿灯的显示时长)(2)protues仿真通过Keil编译后,利用protues软件进行仿真。
在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
三、主要仪器设备四、操作方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。
2.在keil上进行编译后生成“xxx.hex”文件。
3.编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
五、实验结果与分析void S_N(void){VD1=0;VD9=0;VD19=0;VD27=0;Delay(1000);VD1=1;VD9=1;VD19=1;VD27=1;}int main (void) {while(1){E_W();NOT();S_N();NOT();}}六、讨论和心得。
C51单片机实验报告

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};
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;
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;
ki2=1;
ki3=1;
if(!ki1)
{
Delay5ms();
if(!ki1)
a=4;
while(!ki1);
}
if(!ki2)
{
Delay5ms();
C51单片机实验报告

C51单片机实验报告
一、实验内容
本次实验的目的是实现用C51单片机实现简易的闹钟功能:即用户可以设置闹钟时间,当到达闹钟的设定时间的时候,单片机会控制LED灯或者蜂鸣器发出报警信号来提醒用户。
二、实验任务
本次实验任务如下:
1.使用C51单片机读取外部时钟的时间。
2.实现从按键输入闹钟设定的时间。
3.使用定时器实现任务调度,即在每个时刻检查一次外部时钟的时间是否到达闹钟的设定时间,如果到达设定时间,则控制LED灯或者蜂鸣器发出报警信号。
三、实验过程
1.硬件部分:本实验使用的硬件是硬件C51单片机,它具有单片机主频11.059MHz,外部内存2K和内部RAM 128字节。
本次实验采用的C51单片机核心是AT89C51,它具有4K字节的Flash存储器,它有128个8位I/O口和3个定时器/计数器。
本次实验使用到的外设有:LCD1602显示模块、4个4*4的数字键盘、AT24C02的IIC从机存储器、LED灯和蜂鸣器。
2.软件部分:本次实验使用的软件工具是Keil C51编译器,使用它来编写C51单片机程序。
51单片机c语言交通灯设计报告

xxxxxxxxx基于AT89S52交通灯设计学院:电子信息工程专业班级: xxxxxxxxxxxxxx姓名: xx xx学号: xxxxxxxxxxx指导老师: xxxxxxxxxx摘要交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。
交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。
本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。
关键词:交通灯 AT89S52 单片机目录一、设计任务 (4)二、AT89S52单片机及其他元器件简介 (4)(1)AT89S52单片机 (4)三、系统硬件电路设计 (6)(1)时钟电路设计 (6)(2)复位电路设计 (6)(3)灯控制电路设计 (7)(4)按键控制电路设计 (7)四、元件清单及实物图 (8)1、程序清单 (8)2、原理图 (9)五、实验心得 (9)附1 源程序代码 (10)附2 原理图 (16)一、设计任务(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。
(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。
(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。
二、AT89S52单片机及其他元器件简介(1)AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。
单片机流水灯实验报告

单片机流水灯实验报告:实验一:用C51实现流水灯实验实验要求:完成亮流水,即LED从低位流向高位流动,每次流动一位,且每次只亮一个LED灯,其它LED灭。
实验原理:单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。
使用r1或rr a实现位的转换。
实验内容:通过仿真来实现实验电路图代码如下;for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;实验结果:实验程序:#include<REG51.H>void delay();//延时函数声明void main()//主函数{unsigned charx,num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};while(1){for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;}}void delay()//延时函数,无符号字符型变量i为形式参数{unsigned int j,k;//定义无符号字符型变量j和kfor(k=0;k<500;k++)//双重for循环语句实现软件延时for(j=0;j<100;j++);}实验总结:这次试验通过仿真实验软件实现流水灯实验,充分学会了keil 软件和Proteus电路仿真的联合调试,为后期的实验做足了功课。
也认识到仿真实用性。
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五、实验过程中遇到的问题及解决方法
1)最开始的时钟和秒表都没有用计时器和中断,但是也达到了实验要求,最后又改用始终计时器,浪费了很多时间。
2)不知道怎么使数码管显示不同数字,从网上学到用动态扫描来显示。
3)认真学习了中断技术并运用之后,切实意识到中断技术是单片机的核心技术,数码管显示也变得简单和稳定了。
3)简单按键输入捕获判断
二、实验实现的功能
1)开机是点亮12发光二极管,闪烁三下
2)按照顺时针循环依次点亮发光二极管
3)通过按键将发光二极管的显示改为顺逆时针方式
三、系统硬件设计
1)如单片机核心板所示的硬件电路。
四、系统软件设计
设计思路:
1)定义数组使得调用数组可以使led灯能够顺时针和逆时针显示;
{
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;
三、双机通信实验
1、实验目的
UART串行通信接口技术应用
2、完成功能要求
用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。
四、交通灯实验
1、实验目的
1)按键、数码管、发光二极管综合应用编程技术
2)数据存储于EEPROM的技术(也可以不使用)
3)定时中断技术
4)按键中断技术
2、完成功能要求
3)计数器工作时比较计数器的值和所设定的置,确定范围,确定该范围内显示的灯的种类;
4)对于急停的情况,应该在每秒都检测一下键盘,如果键盘有输入,中断,执行全部红灯的程序;
5)关于跳出急停程序,用“while“循环和”if“语句实现;
6)红绿灯和黄灯的显示时间在程序最开始计数器未开始工作室设定两个数的值;
8)将以上思想汇总,编程,实现功能。程序详见附录。
五、实验过程中遇到的问题及解决方法
1)对UART技术不了解,看书和视频以后有了初步了解。
2)按照课本上的程序模仿之后发现可以接收不能发送,认真查询程序发现了在利用数码管显示时将“P0=0XF7”直接将按键检测端口置高,按键无效了。
3)解决问题二之后还是不能发送数据,最后检查发现直接用“IF(TI)”不能有效地开通发送标志位,所以用了先将初值赋值给一个数,检测之后比较,并用比较结果进入发送允许,最后实现。
Delay10ms();
if(!ki1||!ki2||!ki3)
b+=1;
while(!ki1||!ki2||!ki3);
}
}
}
if(r(x=0;x<12;x++)
{
P2=tab1[x];
P3=tab2[x];
Delay900ms();
ko1=0;
ko2=0;
ki1=1;
default:break;
}
}
void interrupt_timer1() interrupt 3
1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。
2)设定参数掉电后不丢失(如果不使用EEPROM,此功能可以不实现)。
3)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。再按该键,恢复正常显示。
实验一流水灯实验
一、实验目的
1)简单I/O引脚的输出
2)掌握软件延时编程方法
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)
{
三、系统硬件设计
1)如单片机核心板所示的硬件电路。
四、系统软件设计
设计思路:
1)该实验不对端口进行复杂操作,所以实验较简单;
2)设定波特率并计算出“TH1”和”TL1”的值;
3)对单片机进行初始化;
4)通过键盘扫面程序读出按下降的键并给予相关的编号;
5)输出编号;
6)读入数过来的值;
7)在数码管上显示;
sbit 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};
上述二个功能至少完成一种功能。
三、系统硬件设计
1)如单片机核心开发板所示的硬件电路。
四、系统软件设计
设计思路:
1)做的是秒表定时器的实验;
2)利用中断技术实现利用单片机定时器完成计时功能;
3)定时器1计时中断程序每隔0.001s中断一次并当作一个计数,则1000次中断为1秒,然后十进制进位即可;
4)在程序开始计数器不工作时设定一个值,当计数器工作时将时间与设定时间比较,如果想等,计数器停止工作,小灯闪烁三下;
{
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;
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
2)对于C语言的很多东西都不知道,语句的用法也不清楚,重新看了C语言,用到什么看什么很快就懂了。
3)主程序中没有用延时程序和死循环导致led不能点亮,请教同学以后才知道。
4)对于按键只是不了解,看书又很模糊,看了网上“KINGST工作室”也就是“手把手教你学单片机”的视频后很清楚明了,之后好多东西也是从上边学到,就不再赘述了。
2)将按键的输入端全部置零,做单独按键使用;
3)利用“while”循环使得数码管可以闪烁三下;
4)利用“for”循环使得小灯能够依次点亮一个周期;
5)将以上思想汇总,编程,实现功能。程序详见附录。
五、实验过程中遇到的问题及解决方法
1)刚开始不知道怎样只设置一个管脚(如P0^0),查阅相关资料后知道表示方法,并学会了用“sbit”语句定义,方便多了。
3)在急停之后如何出循环成为一个很大的困惑,最后运用了“while”循环解决了。
4)发现用子程序以后会使程序简明不少。
指导老师签字:
日期:
附录:
实验一 流水灯实验
最终实现:按任意键反向,只是必须等到一轮结束以后。
程序如下:
#include<reg52.h>
#define uchar unsigned char
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)
指导老师签字:
日期:
实验二定时器或实时时钟实验
一、实验目的
1)数码管动态显示技术
2)定时器的应用
3)按键功能定义
二、实验实现的功能
1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。
2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。
二、定时器或实时时钟实验
1、实验目的
1)数码管动态显示技术
2)定时器的应用
3)按键功能定义
2、完成功能要求
1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。
2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。