产品选型

单片机数码管c程序 如何用单片机控制数码管(带原理图程序注释)

小编 2024-11-24 产品选型 23 0

如何用单片机控制数码管(带原理图程序注释)

说起数码管这个器件时,你可能会对它产生好奇,是怎样控制它显示数字字母的,也许正是因为这个好奇心驱使我们总想去了解它使用它。

数码管:由多个发光二极管封装在一起组成8字结构,引线已在内部完成,我们只需引出他们的各个笔画,公共电极。数码管实际上由七个发光二极管组成“8”字型结构,加上小数点就是8个,这些段位分别由a,b,c,d,e,f,g,dp来表示。

数码管(图片来源于网络)

数码管(图片来源于网络)

数码管(图片来源于网络)

在市场上可以分为两种数码管,分别为共阳极,共阴极,共阳极顾名思义就是把LED的正极端连在一块,在点亮的时候只需要把另一端通过单片机的指令让其接地即可,共阳极也是如此(本篇中为共阴极)。

原理图如下:

原理图

原理图

在单片系统中扩展LED数码管多用共阳极数码管,原因就是选用共阴极数码管在用单片机驱动时,所用的驱动功率较大,共阳极就避免了这个问题,在使用的时候为了避免电流过大,还需在每个字段要串联一个电阻。

但是在使用的时候由于数码管端口较多,想要控制多个数码管的话,还需加74H573锁存器,在本篇讲解中使用该锁存器,数码管采用共阴极。

74H573

原理图

如果想让上图中第一个数码管显示字母'b',则只需要控制相应的位拉高(既c,d,e,f,g),其余为低电平即可,转化成二进制就是0111 1100。

控制代码如下

#include <reg52.h>

sbit duan=P2^6;//定义段选

sbit wei=P2^7;//定义位选

main()

{

P0=0x07;//0111 1100--b

duan=1;//锁存IC失能

duan=0;

P0=0xfe;//1111 1110

wei=1;//锁存IC使能

wei=0;

while(1);

}

在程序中出现断选和位选,所谓断选就是控制数码管显示什么,位选是控制哪一个数码管亮,文章中是想让第一个数码管点亮,在程序中只需让第一个数码管是低电平,其余是高电平即可,转化为二进制就是1111 1110,另外程序中还有让断选或位选等于0和等于1的那句话,这可以理解为锁存器的启动,这样可以把数据写进去而且后期不能随便修改。

小伙伴们你们学会了吗?敢不敢来试试,点亮第三个数码管,显示数字9,把你的答案写在评论区,分享一下吧!

十字路口交通信号灯单片机控制系统设计与调试

第一章 控制要求

1.1 控制要求

(1)系统工作受开关控制,起动开关 ON 则系统工作;起动开关 OFF 则系统停止工作。

(2)控制对象有八个:

东西方向红灯两个 , 南北方向红灯两个,

东西方向黄灯两个 , 南北方向黄灯两个,

东西方向绿灯两个 , 南北方向绿灯两个,

东西方向左转弯绿灯两个,南北方向左转弯绿灯两个。

(3)另外东西方向、南北方向各设置显示两位十进制的7段显示器,用来显示倒数计数值。

1)高峰时段按时序图二(见附图)运行, 正常时段按时序图三(见附图)运行,晚上时段按提示警告方式运行,规律为: 东、南、西、北四个黄灯全部闪亮,其余灯全部熄灭。

高峰时段、正常时段及晚上时段的时序分配按时序图一运行(见附图)。

可以只选择高峰时段或正常时段进行设计,但最后评分值最高以良好评议;如果全部功能实现(需要设计一个24小时的时钟作为时段划分的基础),最高评分值以优秀评议。

时序图

第二章 系统方案设计

2.1交通灯运行状态分析

根据控制要求,系统以下图交通的运行状态来设计系统方案。

状态1南北直行;状态2南北左转; 状态3东西直行;状态4东西左转。

共有四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期。循环执行如图1.5所示:

图2.1 交通灯状态循环图

2.2系统总体方案设计

图2.2系统总体方案图

本系统采用MCS-51系列单片机AT89C51为中心器件来设计交通灯控制器,实现了正常、高峰、晚间时通过单片机的P1口设置红、绿、黄灯亮灭的功能。东西、南北两位7段显示器用来显示倒数计数值。系统分三种工作时段:正常、高峰、晚间,并且通过时间段来控制"正常"、"高峰"、"晚间"相互转化。

正常时段:南北段直行通行(绿灯)、东西段禁止(红灯)40s,同时南北段和东西段方向的数码管分别从40s和70s开始倒计时,至最后5s时南北段绿灯变成黄灯闪烁;此后南北段左转(左转绿灯亮)通行、东西段禁止(红灯)20s,同时南北段和东西段方向的数码管都从20s开始倒计时,至最后5s时南北段左转灯变成黄灯闪烁;再后东西段直行通行(绿灯)、南北段禁止(红灯)40s,同时东西段和南北段方向的数码管分别从40s和70s开始倒计时,至最后5s时东西段绿灯变成黄灯闪烁;最后东西段左转(左转绿灯亮)通行、南北段禁止(红灯)20s,同时东西段和南北段方向的数码管都从20s开始倒计时,至最后5s时东西段左转灯变成黄灯闪烁。

高峰时段:南北段、东西段的通行时间改为45s,左转的时间改为15s,其它与正常时段相同。

晚间时段:禁止左转和直行,东西南北四个方向黄灯闪亮。

第三章 系统电路设计

3.1控制芯片选择

图3.1 AT89C51引脚图

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个可编程定时计数器,2个全双工串行通信口,2个读写口线,器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8051产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,可以按照常规方法对其进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

3.2状态灯选择

该系统设计红、绿、黄状态灯显示的功能,用LED灯来代替实际的交通灯,由于有四种不同的运行状态,一个十字路口需要16个LED灯,倒计时数码管显示选用两位带片选的7段数码管,需要4个。数码管显示简单,程序简单,端口用的少。普通单色发光二极管具有体积小、工作电压低、工作电流小、发光均匀稳定、响应速度快、寿命长等优点,可用各种直流、交流、等电源驱动点亮,它属于电流控制型,使用时需串接合适的限流电阻。

3.3系统硬件原理图设计

图3.2系统原理布置图

第四章 系统软件设计

4.1 程序流程图设计

图4.1主程序流程图

系统通电后,初始化定时器,进行24小时定时,在7:00到8:15或16:30到17:00时,按高峰时段运行。在6:30到7:00或8:15到16;30或18:00到19:00时,按正常时段运行。其余时段,按晚间时段运行。

图4.2 时钟及晚间时段程序流程图

本设计利用单片机的定时器T0中断来设置24小时定时,设置TH1=0x3C,TL1=0xB0.即每0.05秒中断一次。到第20次中断即过了20*0.05秒=1秒时,计60S时,满意1分钟,计满60分钟,满1小时,计满24小时,又重新开始计时。用定时器T1中断来设置数码管倒计时,每满1S时,使时间的计数值减1,便实现了倒计时的功能。

图4.3 高峰时段及正常时段流程图

4.2 系统编程

4.2.1定时器的中断设置

在单片机中,中断技术主要用于实时控制。所谓实时控制,就是要求计算机能及时地响应被控对象提出的分析、计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。由于这些控制参量的请求都是随机发出的,而且要求单片机必须做出快速响应并及时处理,对此,只有靠中断技术才能实现。

本系统中的定时时钟及倒计时的设置和相应中断服务子程序如下:

/*24小时时钟 */

void Timer0Cofig(){

TMOD=0x01; //T0定时器工作方式

TH0=0x3C; //设置初始值,定时50MS

TL0=0xB0;

ET0=1; //定时器开中断

TR0=1; //启动定时器0

EA=1; //CPU开中断总允许

}

void T0int() interrupt 1{

TH0=0x3C; //设置初始值

TL0=0xB0;

second_counter++;

if(second_counter>=20){second++;second_counter=0;}

if(second>=60){minute++;second=0;}

if(minute>=60){hour++;minute=0;}

if(hour>=24){hour=0;}

}

/********倒数显示定时器*********/

void Timer1Cofig()

{

TMOD=0x01; //T1定时器工作方式

TH1=0x3C; //定时器初值50ms中断一次

TL1=0xB0;

ET1=1; //定时器开中断

TR1=1; //启动定时器1

EA=1; //CPU开中断总允许

}

/*定时器中断函数*/

void timer1() interrupt 3{

TH1=0x3C; //重新装入初值

TL1=0xB0;

RGY_second++;

if(RGY_second==20){

RGY_second=0;

Time_EW--;//满1秒,数码管值减1

Time_SN--;

}

}

第五章 系统调试与仿真

5.1 proteus仿真结果

根据系统设计要求,进行keil调试和proteus系统仿真,不断调试程序。发光二极管,数码管都能按要求显示,符合要求。proteus总体仿真图如下。

图5.1 仿真结果

相关问答

单片机 如何用 C程序 编程?

单片机支持汇编编程的C51编程。1、汇编编程,传统的汇编代码。缺点:可读性不强,优点:代码精简2、C51编程,使用专用C语言编程。缺点:代码不精简,优点:可...

【向51 单片机 里写发出脉冲信号的 c程序 怎么编啊?初学,脉冲多...

[最佳回答]//用ADC0808控制PWM输出//通过可变电阻调节脉冲宽度#include#defineucharunsignedchar#defineuintunsignedintsbitCLK...

单片机 怎么创建 c 文件?

单片机创建C文件的步骤如下:1.首先,在单片机的开发环境中打开一个新的工程或项目。2.在工程或项目中找到一个合适的位置,右键点击鼠标,在弹出的菜单中选择...

C ++语言可以写入 单片机 吗?

你需要用单片机c写程序,也就是在如KEIL软件环境下进行编写,然后编译生成可烧录文件。建议你去你们学校图书馆借本单片机c语言方面的书籍看看,都有介绍的。若...

想用51 单片机 编个倒计时的 c程序 ,要求用两位 数码管 显示分钟的?

并用一个按键啥?51单片机我没设计过电路,用的学习板是现成的,对着电路图。那个学习板上没有锁存器啥的,只能靠扫描来显示2个数字(就是两个数码管轮流显示...

51 单片机 的共阴 数码管 怎么显示数字( c 语言)?

要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。以显示数字“0”为例,c语言程序如下:#include要让51单片机共阴数码管显...

c 语言在 单片机 AT89 C51 编写音乐 程序 ,求 程序 ,求求你们了-ZOL问答

下面是一段个完整的程序,有两首歌曲编码,看看可以吗?#include"reg52.h"unsignedcharCount;sbit_Speak=P2^3;//讯...

C #能用在 单片机 上吗?

C#可以用在单片机上,C#属于高级语言,不能用它编写单片机程序,不过可以用它作为单片机的上位机,c#做界面太好用了,可以编写各种窗口界面控制单片机,比如编写...

单片机C 语言计数器 程序 ?

//timer0设定为计数器模式1TMOD&=0xf0;//清除原来的设定TMOD|=0x05;//T0为计数器模式1TH0=0;TL0=0;//从0开始计数TR0=...

想用 c 语言编一个用 单片机 定时器控制直流电机转动时间的 程序 ...

#include#defineuchrunsignedchar#defineuintunsignedintsbitzh0=P2^0;sbitzh1=P2^1;//定义两个端口uintt;//变量Tv...

猜你喜欢