倒计时交通灯的设计与制作
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} else if(INC_f==0)//调节分钟,当按下INC_f:如 果分钟等于59,
{ //则分钟为0 ledscan(s,f,m); if(INC_f==0)
{ if(f==59) f=0; else f++; while(!INC_f)ledscan(s,f,m); } }}
51单片机技术应用活页式教程(C语言版)
51单片机技术应用活页式教程(C语言版)
【任务10.1】 数字钟系统的Proteus设计与仿真
项目 实施
//函数名:ledscan //函数功能:实现8位数码管动态显示时-分-秒 void ledscan(unsigned char h,unsigned char m,unsigned char s) reentrant { uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; //在数码管上显示数字0-9 uint j; P1=led[s%10]; //显示秒个位并送入P1口 P2=0x7f; //位选码01111111送入P2口 for(j=0;j<100;j++); //小延时。以下同理 P2=0xff; //关闭全部使能端,消影。以下同理 P1=led[s/10]; //显示秒十位并送入P1口 P2=0xbf; //位选码10111111送入P2口 for(j=0;j<100;j++); P2=0xff;
P1=0x40; //显示字符“-”并送入P1口 P2=0xdf; //位选码11011111送入P2口 for(j=0;j<100;j++); P2=0xff; P1=led[m%10]; //显示分个位并送入P1口 P2=0xef; //位选码11101111送入P2口 for(j=0;j<100;j++); P2=0xff; P1=led[m/10]; //显示分十位并送入P1口 P2=0xf7; //位选码11110111送入P2口 for(j=0;j<100;j++); P2=0xff; P1=0x40; //显示字符“-”并送入P1口 P2=0xfb; //位选码11111011送入P2口 for(j=0;j<100;j++); P2=0xff; P1=led[h%10]; //显示时个位并送入P1口 P2=0xfd; //位选码11111101送入P2口
{ ledscan(s,f,m);
if(INC_h==0) //调节小时,当按下INC_h:如果 小时等于23,
{ //则小时为0;否则小时加1 if(s==23) s=0; else s++;
while(!INC_h)ledscan(s,f,m);} //判断键是否 释放(按键释放处理,以下同理)
1.请您现场考查,并查找资料画出十字路口交通灯倒计的示意图。 2.请您现场考查,并查找资料分析十字路口交通灯倒计工作时序,画 出主函数流程图。如果遇到紧急情况就要做中断处理,请写出中断处理的 流程图。
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
任务 实施
【任务10.1】 数字钟系统的Proteus 设计与仿真
51单片机技术应用活页式教程(C语言版)
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
//函数名:guan_naozhong //函数功能:外部中断0服务函数, SWITCH按键控制flag_nao。当闹钟响时,按 下此键立即关掉闹铃,同时关掉闹钟功能 void guan_naozhong() interrupt 0 {
3.电路
任务 实施
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
任务 实施
键盘输入 一般而言,当系统需要键盘数量超过8个时,采用矩阵键盘实现;否 则,采用独立式按键实现。按照设计要求,数字钟需要5个按键,所 以采用独立式按键的连接方法,分别由单片机的P3.2~P3.6控制。
flag_nao=~flag_nao; //flag_nao取反 LED=~LED; while(!SWITCH)ledscan(s,f,m);//等待按键 释放 }
【任务10.2】智能温度测量系统 的Proteቤተ መጻሕፍቲ ባይዱs设计与仿真
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
任务 实施
数字钟是单片机应用系统设计的经典项目,综合运用了显示、键盘、定时 器、中断等模块,还可以扩展远程通信A/D等功能,达到将所学知识融会贯 通的目的。数字钟功能和难易程度容易控制,设计方法多种多样,是所有 应用系统设计的基础。
51单片机核心模块包括51单片机最小系统模块,是设计应用系统的控制 核心;显示模块用于显示时间、设置闹钟时间等时间信息;闹钟指示灯 指示闹钟当前状态(开启或关闭);闹钟采用声音报警;键盘输入模块 用来设置时间、开启或关闭闹钟、设置闹钟时间等。
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
3.请您查找资料,画出DS18B20的初始化、读时序与写时序。 4.请您查找资料,简述DS18B20如何进行温度转换?
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【引导学习3】
我们已经学习了两个综合项目的设计与仿真调试,在做任务“倒计时 交通灯的设计与制作”时,要对任务做一些分析思考,请您通过个人学习 、小组讨论,并结合项目知识点完成以下学习任务。
51单片机技术应用活页式教程(C语言版) 倒计时交通灯的设计与制作
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【项目描述】
为完成项目“倒计时交通灯的设计与制作”的任务,在前面已经学习 了C51程序设计方法、定时器/计数器、中断、人机接口通道设计、串 行通信接口技术、模拟量与数字量及其相互转换方法等单片机开发的基 本技术。我们通过学习数字钟Proteus设计与仿真与智能温度测量 Proteus设计与仿真两个单片机综合应用实践案例,将所学知识系统化, 深入领会单片机应用系统的设计、开发思路和方法,从而掌握单片机综 合系统开发流程,完成倒计时交通灯项目的设计与制作。
sbit BEEP=P3^0;//蜂鸣器端口 sbit LED=P3^1; //闹钟开关指示灯, 灯灭--闹钟关闭,灯亮--闹钟开启 //定义全局变量 uchar m,f,s,w; //w为累计50ms的次数,m 为秒计数,f为分计数,h为时计数 uchar f_nao,s_nao; //f_nao为闹钟分计数 ,s_nao为闹钟时计数 bit flag_nao; //flag_nao=0,off,1--on //函数名:ledscan //函数功能:实现8位数码管动态显示时分-秒
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
//函数名: alarm //函数功能:当时间和设置闹铃时间相等 时,闹铃响5s。 void alarm() {
if(flag_nao)//如果flag_nao为真,闹钟开 启
{ if(f==f_nao&&s==s_nao)//判断实时
TL0=(65536-50000)%256; //重新设置T0计数初值低8位 ,定时时间50ms
w++; if(w==2 //当w==20时,w为0,秒计数加一 { w=0;m++; if(m==60) //当秒计数为60时,秒计数为0,分计数加一 {f++;m=0; if(f==60) {s++;f=0;if(s==24)s=0;}//当分计数为60时,分 计数为0,时计数加一 } //当时计数为24时,时计数为0 }}
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
//程序名:ex27.c #include <REGX51.H> #define uint unsigned int #define uchar unsigned char //函数声明 void tiaojie();//调节时钟函数声明 void naozhong(); //闹钟设置函数声明 void alarm(); //闹铃时间函数声明 //5个按键定义 sbit SWITCH=P3^2; //外部中断0,闹钟功能切换键 sbit SET=P3^3; //外部中断1,进入设置闹钟状态 ,进行闹铃设置,QUIT键按下则退出 sbit INC_h=P3^4; //调节时钟和闹钟时,小时加1按 键,加到59后回到0 sbit INC_f=P3^5;//调节时钟和闹钟时,分钟加1按键 ,加到59后回到0 sbit QUIT=P3^6;//退出设置闹钟 //蜂鸣器和闹钟开关指示灯定义
1.要求 ①显示当前的时间。
②手动修改时间信息。
③手动开启/关闭闹钟功能,而且有闹钟状态指示灯。 ④手动设置闹钟,而且当达到设置好的时间点时报警。报警时长定为5s。
51单片机技术应用活页式教程(C语言版)
【任务10.1】 数字钟系统的Proteus设计与仿真
2.分析 数字钟系统整体设计如图所示。
任务 实施
3.根据硬件电路图,请画出主函数的设计及中断函数的流程图。
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【引导学习2】
1.请您上网查找资料,要完成“智能温度测量系统Proteus设计与仿真 ”这个项目任务,会用到我们前面学到的哪些模块?请写出来。
2.请您查找资料,画出智能温度测量系统整体设计示意图及智能温度 测量系统的硬件电路图。
序号
1 2
连接 引脚 P3.2 P3.3
3
P3.4
4
P3.5
5
P3.6
定义名称 功能
SWITCH SET
INC_h
INC_f
QUIT
外部中断0,闹钟开关 外部中断1,进入设置闹钟状态,进行闹铃设置,按 下QUIT键则退出 调节时钟和闹钟时,按一下小时加1,加到23后回到 0 调节时钟和闹钟时,按一下分钟加1,加到59后回到 0 退出设置闹钟
时间和闹钟时间的分,时是否同时相等 { while(m<=5&&flag_nao) //如果
m<=5和flag_nao都为真,闹铃响5s {BEEP=!BEEP;ledscan(s,f,m);}
} } }
//函数名:t0 //函数功能:T0中断服务函数,在T0的工作方式1,采用 内部时钟定时中断实现实时时钟 void t0() interrupt 1//内部定时T0中断服务函数 { TH0=(65536-50000)/256;//重新设置T0计数初值高8位 ,定时时间50ms
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【引导学习1】
我们即将进入“倒计时交通灯的设计与制作”的学习,请您通过个人 学习、小组讨论,并结合项目知识点完成以下学习任务。
1.请您查找资料,要完成数字钟这个项目任务,会用到我们前面学到 的哪些模块?请写出来。
2.请您查找资料,画出数字钟系统整体设计示意图及数字钟的硬件电 路图。
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
任务 实施
采用定时器/计数器T0的工作方式1实现50ms定时,采用中断编程,从而实现秒、分、时的计时 。程序设置定时器/计数器T0为高优先级中断,2个外部中断为低优先级中断,实现2级中断嵌套。
51单片机技术应用活页式教程(C语言版)
51单片机技术应用活页式教程(C语言版)
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
for(j=0;j<100;j++); P2=0xff; P1=led[h/10]; //显示时十位并送入P1口 P2=0xfe; //位选码11111110送入P2口 for(j=0;j<100;j++); P2=0xff; } //函数名: tiaojie //函数功能:实现每次按INC_h实时时钟的小时 就加1,每次按INC_f实时时钟的分钟就加1。 void tiaojie() { if(INC_h==0) //判断是否有键按下。 (按键延时去抖处理,以下同理)
{ //则分钟为0 ledscan(s,f,m); if(INC_f==0)
{ if(f==59) f=0; else f++; while(!INC_f)ledscan(s,f,m); } }}
51单片机技术应用活页式教程(C语言版)
51单片机技术应用活页式教程(C语言版)
【任务10.1】 数字钟系统的Proteus设计与仿真
项目 实施
//函数名:ledscan //函数功能:实现8位数码管动态显示时-分-秒 void ledscan(unsigned char h,unsigned char m,unsigned char s) reentrant { uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; //在数码管上显示数字0-9 uint j; P1=led[s%10]; //显示秒个位并送入P1口 P2=0x7f; //位选码01111111送入P2口 for(j=0;j<100;j++); //小延时。以下同理 P2=0xff; //关闭全部使能端,消影。以下同理 P1=led[s/10]; //显示秒十位并送入P1口 P2=0xbf; //位选码10111111送入P2口 for(j=0;j<100;j++); P2=0xff;
P1=0x40; //显示字符“-”并送入P1口 P2=0xdf; //位选码11011111送入P2口 for(j=0;j<100;j++); P2=0xff; P1=led[m%10]; //显示分个位并送入P1口 P2=0xef; //位选码11101111送入P2口 for(j=0;j<100;j++); P2=0xff; P1=led[m/10]; //显示分十位并送入P1口 P2=0xf7; //位选码11110111送入P2口 for(j=0;j<100;j++); P2=0xff; P1=0x40; //显示字符“-”并送入P1口 P2=0xfb; //位选码11111011送入P2口 for(j=0;j<100;j++); P2=0xff; P1=led[h%10]; //显示时个位并送入P1口 P2=0xfd; //位选码11111101送入P2口
{ ledscan(s,f,m);
if(INC_h==0) //调节小时,当按下INC_h:如果 小时等于23,
{ //则小时为0;否则小时加1 if(s==23) s=0; else s++;
while(!INC_h)ledscan(s,f,m);} //判断键是否 释放(按键释放处理,以下同理)
1.请您现场考查,并查找资料画出十字路口交通灯倒计的示意图。 2.请您现场考查,并查找资料分析十字路口交通灯倒计工作时序,画 出主函数流程图。如果遇到紧急情况就要做中断处理,请写出中断处理的 流程图。
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
任务 实施
【任务10.1】 数字钟系统的Proteus 设计与仿真
51单片机技术应用活页式教程(C语言版)
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
//函数名:guan_naozhong //函数功能:外部中断0服务函数, SWITCH按键控制flag_nao。当闹钟响时,按 下此键立即关掉闹铃,同时关掉闹钟功能 void guan_naozhong() interrupt 0 {
3.电路
任务 实施
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
任务 实施
键盘输入 一般而言,当系统需要键盘数量超过8个时,采用矩阵键盘实现;否 则,采用独立式按键实现。按照设计要求,数字钟需要5个按键,所 以采用独立式按键的连接方法,分别由单片机的P3.2~P3.6控制。
flag_nao=~flag_nao; //flag_nao取反 LED=~LED; while(!SWITCH)ledscan(s,f,m);//等待按键 释放 }
【任务10.2】智能温度测量系统 的Proteቤተ መጻሕፍቲ ባይዱs设计与仿真
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
任务 实施
数字钟是单片机应用系统设计的经典项目,综合运用了显示、键盘、定时 器、中断等模块,还可以扩展远程通信A/D等功能,达到将所学知识融会贯 通的目的。数字钟功能和难易程度容易控制,设计方法多种多样,是所有 应用系统设计的基础。
51单片机核心模块包括51单片机最小系统模块,是设计应用系统的控制 核心;显示模块用于显示时间、设置闹钟时间等时间信息;闹钟指示灯 指示闹钟当前状态(开启或关闭);闹钟采用声音报警;键盘输入模块 用来设置时间、开启或关闭闹钟、设置闹钟时间等。
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
3.请您查找资料,画出DS18B20的初始化、读时序与写时序。 4.请您查找资料,简述DS18B20如何进行温度转换?
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【引导学习3】
我们已经学习了两个综合项目的设计与仿真调试,在做任务“倒计时 交通灯的设计与制作”时,要对任务做一些分析思考,请您通过个人学习 、小组讨论,并结合项目知识点完成以下学习任务。
51单片机技术应用活页式教程(C语言版) 倒计时交通灯的设计与制作
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【项目描述】
为完成项目“倒计时交通灯的设计与制作”的任务,在前面已经学习 了C51程序设计方法、定时器/计数器、中断、人机接口通道设计、串 行通信接口技术、模拟量与数字量及其相互转换方法等单片机开发的基 本技术。我们通过学习数字钟Proteus设计与仿真与智能温度测量 Proteus设计与仿真两个单片机综合应用实践案例,将所学知识系统化, 深入领会单片机应用系统的设计、开发思路和方法,从而掌握单片机综 合系统开发流程,完成倒计时交通灯项目的设计与制作。
sbit BEEP=P3^0;//蜂鸣器端口 sbit LED=P3^1; //闹钟开关指示灯, 灯灭--闹钟关闭,灯亮--闹钟开启 //定义全局变量 uchar m,f,s,w; //w为累计50ms的次数,m 为秒计数,f为分计数,h为时计数 uchar f_nao,s_nao; //f_nao为闹钟分计数 ,s_nao为闹钟时计数 bit flag_nao; //flag_nao=0,off,1--on //函数名:ledscan //函数功能:实现8位数码管动态显示时分-秒
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
//函数名: alarm //函数功能:当时间和设置闹铃时间相等 时,闹铃响5s。 void alarm() {
if(flag_nao)//如果flag_nao为真,闹钟开 启
{ if(f==f_nao&&s==s_nao)//判断实时
TL0=(65536-50000)%256; //重新设置T0计数初值低8位 ,定时时间50ms
w++; if(w==2 //当w==20时,w为0,秒计数加一 { w=0;m++; if(m==60) //当秒计数为60时,秒计数为0,分计数加一 {f++;m=0; if(f==60) {s++;f=0;if(s==24)s=0;}//当分计数为60时,分 计数为0,时计数加一 } //当时计数为24时,时计数为0 }}
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
//程序名:ex27.c #include <REGX51.H> #define uint unsigned int #define uchar unsigned char //函数声明 void tiaojie();//调节时钟函数声明 void naozhong(); //闹钟设置函数声明 void alarm(); //闹铃时间函数声明 //5个按键定义 sbit SWITCH=P3^2; //外部中断0,闹钟功能切换键 sbit SET=P3^3; //外部中断1,进入设置闹钟状态 ,进行闹铃设置,QUIT键按下则退出 sbit INC_h=P3^4; //调节时钟和闹钟时,小时加1按 键,加到59后回到0 sbit INC_f=P3^5;//调节时钟和闹钟时,分钟加1按键 ,加到59后回到0 sbit QUIT=P3^6;//退出设置闹钟 //蜂鸣器和闹钟开关指示灯定义
1.要求 ①显示当前的时间。
②手动修改时间信息。
③手动开启/关闭闹钟功能,而且有闹钟状态指示灯。 ④手动设置闹钟,而且当达到设置好的时间点时报警。报警时长定为5s。
51单片机技术应用活页式教程(C语言版)
【任务10.1】 数字钟系统的Proteus设计与仿真
2.分析 数字钟系统整体设计如图所示。
任务 实施
3.根据硬件电路图,请画出主函数的设计及中断函数的流程图。
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【引导学习2】
1.请您上网查找资料,要完成“智能温度测量系统Proteus设计与仿真 ”这个项目任务,会用到我们前面学到的哪些模块?请写出来。
2.请您查找资料,画出智能温度测量系统整体设计示意图及智能温度 测量系统的硬件电路图。
序号
1 2
连接 引脚 P3.2 P3.3
3
P3.4
4
P3.5
5
P3.6
定义名称 功能
SWITCH SET
INC_h
INC_f
QUIT
外部中断0,闹钟开关 外部中断1,进入设置闹钟状态,进行闹铃设置,按 下QUIT键则退出 调节时钟和闹钟时,按一下小时加1,加到23后回到 0 调节时钟和闹钟时,按一下分钟加1,加到59后回到 0 退出设置闹钟
时间和闹钟时间的分,时是否同时相等 { while(m<=5&&flag_nao) //如果
m<=5和flag_nao都为真,闹铃响5s {BEEP=!BEEP;ledscan(s,f,m);}
} } }
//函数名:t0 //函数功能:T0中断服务函数,在T0的工作方式1,采用 内部时钟定时中断实现实时时钟 void t0() interrupt 1//内部定时T0中断服务函数 { TH0=(65536-50000)/256;//重新设置T0计数初值高8位 ,定时时间50ms
51单片机技术应用活页式教程(C语言版)
项目十 倒计时交通灯的设计与制作
【引导学习1】
我们即将进入“倒计时交通灯的设计与制作”的学习,请您通过个人 学习、小组讨论,并结合项目知识点完成以下学习任务。
1.请您查找资料,要完成数字钟这个项目任务,会用到我们前面学到 的哪些模块?请写出来。
2.请您查找资料,画出数字钟系统整体设计示意图及数字钟的硬件电 路图。
51单片机技术应用活页式教程(C语言版) 【任务10.1】 数字钟系统的Proteus设计与仿真
任务 实施
采用定时器/计数器T0的工作方式1实现50ms定时,采用中断编程,从而实现秒、分、时的计时 。程序设置定时器/计数器T0为高优先级中断,2个外部中断为低优先级中断,实现2级中断嵌套。
51单片机技术应用活页式教程(C语言版)
51单片机技术应用活页式教程(C语言版)
项目 实施
【任务10.1】 数字钟系统的Proteus设计与仿真
for(j=0;j<100;j++); P2=0xff; P1=led[h/10]; //显示时十位并送入P1口 P2=0xfe; //位选码11111110送入P2口 for(j=0;j<100;j++); P2=0xff; } //函数名: tiaojie //函数功能:实现每次按INC_h实时时钟的小时 就加1,每次按INC_f实时时钟的分钟就加1。 void tiaojie() { if(INC_h==0) //判断是否有键按下。 (按键延时去抖处理,以下同理)