单只数码管循环显示
51单片机数码管0到99循环程序代码
51单片机数码管0到99循环程序代码1. 概述在嵌入式系统的开发中,数码管是一种常见的输出设备,可以用于显示数字、字符等信息。
而51单片机是一种广泛应用的微控制器,其结合了强大的功能和灵活的应用,能够很好地驱动数码管。
本文将介绍如何使用51单片机编写一个循环显示0到99的程序,通过数码管输出这些数字。
2. 电路连接我们需要连接51单片机和数码管。
通常我们使用的是共阴数码管,其连接方式如下:- VCC连接到5V电源- GND连接到GND- DIO(数据输入/输出)连接到51单片机的IO口3. 程序设计下面是一个简单的C语言程序设计,用于控制数码管显示0到99的数字。
```c#include <reg51.h>sbit DIO = P2^0; // 数码管数据输入/输出sbit CL = P2^1; // 数码管片选信号unsigned char code numCode[10] = { 0xc0, // 00xf9, // 10xa4, // 20xb0, // 30x99, // 40x92, // 50x82, // 60xf8, // 70x80, // 80x90 // 9};//延时函数void delay(unsigned int i) {unsigned int j,k;for (j=i;j>0;j--)for(k=110;k>0;k--);}void display(unsigned char num) { CL = 1; //关闭片选DIO = numCode[num / 10]; //十位 delay(2);CL = 0;DIO = 0xff; //消隐delay(2);CL = 1; //关闭片选DIO = numCode[num 10]; //个位 delay(2);CL = 0;DIO = 0xff; //消隐delay(2);}void m本人n() {unsigned char i,j;while(1) {for(i=0;i<10;i++) {for(j=0;j<10;j++) {display(i * 10 + j);}}}}```4. 程序说明- 首先定义了数码管的连接引脚,以及0~9的显示编码。
数码管的显示原理
数码管的显示原理
数码管的显示原理是通过控制流经其内部的电流来发光。
数码管内部有多个发光二极管,每个发光二极管都代表一个数字或字母。
当通过特定的电路将电流传递到相应的发光二极管时,它们就会发光,显示出对应的数字或字母。
传统的七段数码管由7个发光二极管组成,分别代表数字0-9。
每个发光二极管都有一个引脚,用来连接电路。
数码管内部还有一个共阳或共阴的引脚,用来控制整个数码管的亮暗状态。
在共阳数码管中,当共阳引脚接通电流时,通过控制每个发光二极管的引脚接通电流,即可选择要亮的数字或字母,并显示出来。
同时,其他未选中的发光二极管的引脚不接通电流,使其保持熄灭状态。
在共阴数码管中,当共阴引脚接通电流时,与共阳数码管相反,通过控制每个发光二极管的引脚断开电流,即可选择要亮的数字或字母,并显示出来。
其他未选中的发光二极管的引脚保持接通电流,使其保持亮着的状态。
通过快速切换不同的发光二极管的引脚状态,可以实现多个数字或字母的连续显示。
例如,当需要显示四位数时,只需按照一定的时间顺序循环切换不同的数字或字母,以呈现给用户。
总之,数码管的显示原理是通过控制流经其内部的电流来发光,通过引脚的接通或断开来选择要显示的数字或字母。
《单片机C语言程序设计实训100例—基于8051+Proteus仿真
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
数码管显示
8 8 1 0 0 0 0 0 0 0 80H 0 1 1 1 1 1 1 1 7FH
9 9 1 0 0 1 0 0 0 0 90H 0 1 1 0 1 1 1 1 6FH
A A 1 0 0 0 1 0 0 0 88H 0 1 1 1 0 1 1 1 77H
BB
CC
DD
EE
FF
HH
LL
P
P
RR
UU
NPN
NPN
NPN
NPN
2
3
3
4
5
6
7
8
4
源程序:
#include<reg51.h>
#include<intrins.h>
#defined uchar unsigned char
#defined uint unsigned int //0~7的数码管段码
uchar code DSY_CODE[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
0 1 1 1 1 1 0 0 7CH 0 0 1 1 1 0 0 1 39H 0 1 0 1 1 1 1 0 5EH 0 1 1 1 1 0 0 1 79H 0 1 1 1 0 0 0 1 71H 0 1 1 1 0 1 1 0 76H 0 0 1 1 1 0 0 0 38H 0 1 1 1 0 0 1 1 73H 0 0 1 1 0 0 0 1 31H 0 0 1 1 1 1 1 0 3EH 0 1 1 0 1 1 1 0 6EH 0 1 0 0 0 0 0 0 40H 1 0 0 0 0 0 0 0 80H 0 0 0 0 0 0 0 0 00H
单只数码管循环显示0~9
单只数码管循环显示0-9报告设计题目:单只数码管循环显示0~9设计要求:单片机控制1只数码管,循环显示0~9需求分析:本设计要求单只数码管循环显示0~9,这里采用的是共阴极数码管。
让数码管显示数字的步骤为:1)使数码管的公共端接地(共阴极)上。
2)将显示码送到单片机的P0口,向数码管的各个段输出不同的电平,使单个数码管循环显示0-9这10个数字。
复位电路:在上电或复位过程中,控制CPU的复位状态:这段时间让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。
无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。
而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。
许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。
基本的复位方式单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
设计原理:一、数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
单片机C语言程序设计实训100例——基于8051+Proteus仿真(前25题)
单片机C语言程序设计实训100例——基于8051+ Proteus仿真01 闪烁的LED/*名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P10;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02从左到右的流水灯/*名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}038只LED左右来回点亮/*名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04花样流水灯/*名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
数码管的显示方式
数码管的显示方式有两种:静态显示和动态显示。
1.静态显示方式。
所谓静态显示就是指无论是多少位数码管,同时处于显示状态。
如图2.19所示。
图2.19 4个共阳极数数码管静态显示时的连接方式与显示状态当单片机系统中使用静态数码管显示时,需要在每一个数码管上添加一个锁存器,当需要某个数码管显示其他内容时,只需要修改与其相连的锁存器的值即可。
由图2.19中可以看出,当数码管处于静态显示方式时,所有位选线(数码管的公共端)连接在一起,而各个数码管的段选线(数码管上各笔段的引出线)是相互分离的。
静态显示的优点是:数码管显示无闪烁,亮度高,软件控制比较容易;缺点是:需要的硬件电路较多(每一个数码管都需要一个锁存器),如果在全国大学生电子设计竞赛中使用,将造成很大的不便,同时由于所有数码管都处于被点亮状态,所以需要的电流很大,当数码管的数量增多时,对电源的要求也就随之增高。
所以,在大部分的硬件电路设计中,很少采用静态显示方式。
2.动态显示方式。
所谓动态显示,是指无论在任何时刻只有一个数码管处于显示状态,每个数码管轮流显示。
如图2.20所示。
图2.20 4个共阴极数码管动态显示时的连接方式与显示状态由图2.20中可以看出,当数码管处于动态显示时,所有位选线分离,而每个数码管的各条段选线相连。
当需要显示数字或字符时,需要将所有数码管轮流点亮,这时对每个数码管的点亮周期有了一个较严格的要求:由于发光体从通入电流开始点亮到完全发光需要一定的时间,叫做响应时间,这个时间对于不同的发光材质是不同的,通常情况下为几百微秒,所以数码管的刷新周期(所有数码管被轮流点亮一次的时间)不要过短,这也与数码管的数量有关,一般的数码管的刷新周期应控制在5ms~10ms,即刷新率为200Hz~100Hz,这样既保证了数码管每一次刷新都被完全点亮,同时又不会产生闪烁现象。
动态显示的优点是:硬件电路简单(数码管越多,这个优势越明显),由于每个时刻只有一个数码管被点亮,所以所有数码管消耗的电流较小;缺点是:数码管亮度不如静态显示时的亮度高,例如有8个数码管,以1秒为单位,每个数码管点亮的时间只有1/8秒,所以亮度较低;如果刷新率较低,会出现闪烁现象;如果数码管直接与单片机连接,软件控制上会比较麻烦等。
第3节-数码管驱动(项目3)
}
void main (void)
{
unsigned char i;
ห้องสมุดไป่ตู้
// 变量 i 作为数组的0~9编号
P2 = 0;//P2.0 = 0,通过反相器反相后,加在数码管公共端上的电压
while (1)
{ P0 = seven_seg[i]; delay(50000); i++;
//输出0~9到共阳七段显示器 //调用时间延迟函数delay()
在程序设计时,库函数可以很方便的被用户程序调用。 例如,利用库函数实现的跑马灯程序为
/************************/
#include<reg51.h> #include<intrins.h>//库函数的头文件
void delay(unsigned int x)
while (1)
{ …….. delay(1000); …… }
}
//调用时间延迟函数,实参为1000
三、有返回值函数
如果函数中要返回数值时,必须使用return命令。 并且返回值的类型必须与函数的类型一致。如把8位8421二 进制码转换成8421BCD码函数。
unsigned char DEC_BCD_conv(unsigned char x)
if(i == 10)
i = 0;
}
}
当程序中使用常量数据时,如共阳数码管数字显示编 码、液晶显示器的汉字编码等,一般希望这些数据当程序 下载到单片机时存放在单片机的ROM区,对此类数据声明前 面需要加上关键字code或const,如数码管的显示编码。
利用数码管也可以显示日期和时间,但是在本项目中, 数字变化时间是由延时函数实现的,由于C语言程序进过编 译后的生成的汇编程序与直接采用汇编语言编写的程序
单只数码管循环显示0~9
单只数码管循环显示0~9【任务】在单个数码管上循环显示数字0~9,实现类似于计时(或计数)显示的功能。
【硬件平台】在51单片机最小系统的基础上,以端口P0控制一个七段数码管。
为提高驱动能力,增加了上拉排阻RP1(10k)。
【编程思路】因为这里使用了共阴数码管,所以当P0端口相应引脚为高电平时,点亮相应的数码段。
0~9的段码按相同的时间间隔从单片机内存读到P0口,由此产生从0到9的循环显示效果。
先写下前面三板斧,内涵不赘述:#include <reg51.h>#define uchar unsigned char#define uint unsigned int因为0~9的段码是固定的,不妨将其保存为code类型的数组。
注意是共阴接法,比如要显示“0”,那么P0端口的各引脚电平为:a=b=c=d=e=f=1,g=0,闲置的P0.7=0(按字节给端口赋值,所以闲置位也赋值),表示为二进制是P0.7gfedcba=00111111,对应的十六进制为0x3F。
其余段码可类似分析:uchar code display_code[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x66,0x6D,0x7D,0x7F,0x6F,0x00 }; //0x00表示段码全灭显示不同的数字之间要有时间间隔,须定义一个延时函数以便主函数调用实现间隔延时:最后编写主函数:【代码展示】#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar codedisplay_code[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x66,0x6D,0x7D,0x 7F,0x6F,0x00};void delay(uint x){uchar i;while(x--) for(i=0;i<100;i++);}void main(){uchar i=0; //定义数组下标变量,用以遍历数组P0=0x00; //数码管初始不亮while(1){P0=display_code[i]; //0~9对应的段码送给P0口,显示9后段码熄灭(0x00)i=(i+1)%10;//从0循环到9,超过10后又回到0,%为取余数算符}}。
《一位LED数码管显示0-9》
成都理工大学工程技术学院单片微机原理及应用课程设计《一位LED数码管显示0-9》学生姓名:学号:专业:班级:指导教师:完成日期:目录一实验目的与任务 (2)二实验要求 (2)三实验内容 (2)四元器件清单 (2)五LED数码管的结构及工作原理 (2)六关于PLC控制LDE介绍 (4)七原理图绘制说明 (5)八流程图绘制以及说明 (9)九电路原理图与仿真 (10)十源程序 (12)十一心得体会 (12)十二参考文献 (13)一、实验与任务结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。
做到能检查出错误,熟练解决问题;对设备进行全面维修。
通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。
利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。
本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。
二、实验要求1、了解七段LED数码管的结构、分类以及数码管的显示码。
2、学习1位LED数码管静态显示与动态显示的编程方法。
3、掌握可编程序控制器技术应用过程中的一些基本技能。
4、了解可编程控制器的装备、调试的全过程。
三、实验内容1、练习设计、连接、调试控制电路;2、学习PLC程序编程;四、元器件清单从PROTUES库中选择元器件(1)AT89C51;单片机。
(2)RES、RX8;电阻、8排阻。
(3)7SEG-COM-CAT-BLUE;带公共端共阴极七段蓝色数码管。
(4)CAP/CAP-ELEC;电容、电解电容。
(5)CRYSTAL:晶振。
五、LED数码管的结构及工作原理led数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
实验四 数码管的动态显示实验
实验四数码管的动态显示实验班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹一、实验目的熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。
根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。
二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。
2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。
三、实验原理实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。
动态扫描可以实现要求。
简单地说,动态扫描就是选通一位,送一位数据。
原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。
可以通过依次选通一位7段数码管并通过P0端口送出显示数据。
由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。
本实验使用中断,实现每2s更新一次数字。
四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。
(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。
由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。
按键控制1位LED数码管显示0-9
单片机课程设计姓名:陈素云班级:09电力方向2班学号:200920305340设计题目:按键控制1位LED数码管显示0-9设计要求:通过单片的I/O口与LED数码管所构成的单片机系统的软件编程,使学生掌握简单的单片机系统的设计,同时初步学全用汇编语言和C语言两种方式编程的基本方法。
学生必须采用单片机AT89C51为LED显示屏的控制为核心,分别置“1”或“0”,让某些段的LED 发光,其它的熄灭,然后达到显示不同的字符和图符号的目的. 学生根据前期设计的步骤按照设计报告内容的具体要求,选择前期设计的一个典型题目,写出详尽的课程设计报告,重点内容包括方案论证、完整的电路图、软件系统流程图及开发程序、组装调试内容和总结等。
目录第1节引言 (3)1.1 LED数码显示器概述 (3)1.2 设计任务 (5)1.3设计目的 (6)第2节 AT89C51单片机简介 (6)2.1 AT89C51单片机 (6)2.2 单片机管脚图 (7)2.3管脚说明 (7)2.4振荡器特性 (9)第3节设计主程序与硬件电路设计 (9)3.1设计的主程序 (10)3.2系统程序所需硬件 (10)3.2.1所需的硬件 (10)3.2.2所需硬件的结构图 (11)3.3 硬件电路总连接图 (12)第4节程序运行过程 (12)4.1分析步骤 (12)4.2 程序执行过程 (13)第5节程序运行结果 (13)总结参考文献第1节引言还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。
在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。
LED 数码显示器是单片机嵌入式系统中经常使用的显示器件。
一个“8”字型的显示模块用“a、b、c、d、e、f、g、h” 8 个发光二极管组合而成。
每个发光二极管称为一字段。
LED 数码显示器有共阳极和共阴极两种结构形式。
由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
单片机指令的数码管显示学习如何使用单片机指令进行数码管显示
单片机指令的数码管显示学习如何使用单片机指令进行数码管显示在学习如何使用单片机指令进行数码管显示之前,我们首先需要了解什么是单片机和数码管。
一、单片机简介单片机是一种集成电路芯片,具有微处理器、存储器和各种接口电路等功能。
它具有体积小、功耗低、成本低等特点,广泛应用于电子设备、通信设备、汽车电子等领域。
二、数码管简介数码管是一种电子数字显示器件,常用来显示数字信息。
常见的数码管有共阴极数码管和共阳极数码管,其中共阴极数码管的极性是负极大,共阳极数码管的极性是正极大。
接下来,我们将学习如何使用单片机指令控制数码管进行显示。
1. 准备工作首先,我们需要准备以下材料:- 单片机开发板- 数码管(可以根据需要选择共阴极还是共阳极数码管)- 面包板- 连接线2. 硬件连接将数码管的引脚与单片机开发板上的引脚相连接,确保连接稳固。
3. 编写代码使用单片机开发工具(如Keil、Arduino等)编写相应的代码。
下面以Keil例举一个简单的示例。
```#include <reg51.h>sbit digit1 = P2^0;sbit digit2 = P2^1;sbit digit3 = P2^2;sbit digit4 = P2^3;sbit segA = P0^0; // 数码管A段sbit segB = P0^1; // 数码管B段sbit segC = P0^2; // 数码管C段sbit segD = P0^3; // 数码管D段sbit segE = P0^4; // 数码管E段sbit segF = P0^5; // 数码管F段sbit segG = P0^6; // 数码管G段sbit segDP = P0^7; // 数码管小数点段void delay(unsigned int n){unsigned int i, j;for(i = 0; i < n; i++)for(j = 0; j < 120; j++);}void displayDigit(unsigned char digit){switch(digit){case 0:segA = 0; segB = 0; segC = 0; segD = 0; segE = 0; segF = 0; segG = 1; segDP = 1;break;case 1:segA = 1; segB = 0; segC = 0; segD = 1; segE = 1; segF = 1; segG = 1; segDP = 1;break;case 2:segG = 0; segDP = 1;break;case 3:segA = 0; segB = 0; segC = 0; segD = 0; segE = 1; segF = 1; segG = 0; segDP = 1;break;case 4:segA = 1; segB = 0; segC = 0; segD = 1; segE = 1; segF = 0; segG = 0; segDP = 1;break;case 5:segA = 0; segB = 1; segC = 0; segD = 0; segE = 1; segF = 0; segG = 0; segDP = 1;break;case 6:segA = 0; segB = 1; segC = 0; segD = 0; segE = 0; segF = 0; segG = 0; segDP = 1;break;case 7:segG = 1; segDP = 1;break;case 8:segA = 0; segB = 0; segC = 0; segD = 0; segE = 0; segF = 0; segG = 0; segDP = 1;break;case 9:segA = 0; segB = 0; segC = 0; segD = 1; segE = 1; segF = 0; segG = 0; segDP = 1;break;default:break;}}void main(){unsigned char i;while(1){for(i = 0; i < 10; i++){displayDigit(i);delay(1000);}}}```4. 烧写程序将编写好的代码烧写到单片机开发板上。
Arduino入门教程(17)—数码管显示
Arduino 入门教程(17)—数码管显示数码管,常见的用来显示数字的,比如像计算器。
这回我们就要来好好研究一下数码管,看看它是如何工作的。
数码管,其实也算是LED 中的一种。
数码管的每一段,都是一个独立的 LED,通过数字引脚来控制相应段的亮灭就能达到显示数字的效果。
这个项目要实现的是循环显示数字0~9。
所需材料1×八段数码管8×220 欧电阻 STEP 1:硬件连接按下图连线图连接,注意数码管各段所对应的引脚。
右边引脚说明图上为什么画这么几个箭头呢?个人觉得,这样看起来更方便。
可以给你作为参考。
我们从上面一排看,红色箭头的方向,从右往左,b a f g 的顺序正好对应,下面红色箭头逆时针顺序b --> a --> f --> g。
蓝色箭头也是表达的同样的意思。
还特意在连接图上,对数码管所连接的引脚做了标示。
这样就能更清楚的知道哪个引脚控制哪一段了。
这 8 个电阻同样是起限流的作用。
STEP 2:输入代码1. void setup(){2. for(int pin = 2 ; pin <= 9 ; pin++){ // 设置数字引脚2~9为输出模式3. pinMode(pin, OUTPUT);4. digitalWrite(pin, HIGH);5. }6. }7.8. void loop() {9. // 显示数字010. int n0[8]={0,0,0,1,0,0,0,1};11. //数字引脚2~9依次按数组n0[8]中的数据显示12. for(int pin = 2; pin <= 9 ; pin++){13. digitalWrite(pin,n0[pin-2]);14. }15. delay(500);16.17. // 显示数字118. int n1[8]={0,1,1,1,1,1,0,1};19. // 数字引脚2~9依次按数组n1[8]中的数据显示20. for(int pin = 2; pin <= 9 ; pin++){21. digitalWrite(pin,n1[pin-2]);22. }23. delay(500);24.25. // 显示数字226. int n2[8]={0,0,1,0,0,0,1,1};27. // 数字引脚2~9依次按数组n2[8]中的数据显示28. for(int pin = 2; pin <= 9 ; pin++){29. digitalWrite(pin,n2[pin-2]);30. }31. delay(500);32.33. // 显示数字334. int n3[8]={0,0,1,0,1,0,0,1};35. // 数字引脚2~9依次按数组n3[8]中的数据显示36. for(int pin = 2; pin <= 9 ; pin++){37. digitalWrite(pin,n3[pin-2]);38. }39. delay(500);40.41. // 显示数字442. int n4[8]={0,1,0,0,1,1,0,1};43. // 数字引脚2~9依次按数组n4[8]中的数据显示44. for(int pin = 2; pin <= 9 ; pin++){45. digitalWrite(pin,n4[pin-2]);46. }47. delay(500);48.49. // 显示数字550. int n5[8]={1,0,0,0,1,0,0,1};51. // 数字引脚2~9依次按数组n5[8]中的数据显示52. for(int pin = 2; pin <= 9 ; pin++){53. digitalWrite(pin,n5[pin-2]);54. }55. delay(500);56.57. // 显示数字658. int n6[8]={1,0,0,0,0,0,0,1};59. // 数字引脚2~9依次按数组n6[8]中的数据显示60. for(int pin = 2; pin <= 9 ; pin++){61. digitalWrite(pin,n6[pin-2]);62. }63. delay(500);64.65. // 显示数字766. int n7[8]={0,0,1,1,1,1,0,1};67. // 数字引脚2~9依次按数组n7[8]中的数据显示68. for(int pin = 2; pin <= 9 ; pin++){69. digitalWrite(pin,n7[pin-2]);70. }71. delay(500);72.73. // 显示数字874. int n8[8]={0,0,0,0,0,0,0,1};75. // 数字引脚2~9依次按数组n8[8]中的数据显示76. for(int pin = 2; pin <= 9 ; pin++){77. digitalWrite(pin,n8[pin-2]);78. }79. delay(500);80.81. // 显示数字982. int n9[8]={0,0,0,0,1,1,0,1};83. // 数字引脚2~9依次按数组n9[8]中的数据显示84. for(int pin = 2; pin <= 9 ; pin++){85. digitalWrite(pin,n9[pin-2]);86. }87. delay(500);88. }89.完成下载后,数码管就会循环显示0~9 的数字。
单只数码管循环显示0~9
项目一:单只数码管循环显示0~9一、设计要求:用汇编语言编写程序实现51单片机控制1只数码管,循环显示0~9.并用仿真软件仿真出实验结果。
最后,用51单片机开发板实现一支数码管循环显示0到9。
二、设计原理:数码管显示原理:我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形.数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下.其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
数码管的8段,对应一个字节的8位,a对应最低位,dp 对应最高位.所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
本实验用到的共阳极0到9编码:0C0H ,0F9H ,0A4H ,0B0H,99H ,92H ,82H,0F8H ,80H ,90HP0口:P0。
0—P0。
7: 双向I/O (内置场效应管上拉),寻址外部程序存储器时分时作为双向8位数据口和输出低8位地址复用口;不接外部程序存储器时可作为8位准双向I/O 口使用。
PO 结构图如下:四、设计仿真图:主函数 给累加器A 赋初值0 A 加1P0口显示 MOVCA,@A+DPTR 查表 A=10?五、源代码:ORG 0000HSJMP MAINORG 030HMAIN: MOV R1,#00HMOV A,R1D1: ANL A,#0FHMOV DPTR,#TABMOVC A,@A+DPTR ;查表MOV P0,A ;P0口输出,显示数字ACALL DELAYINC R1MOV A,R1 ;A加1CJNE A,#10,D1 ;判断A是否到达10LJMP MAIN ;当A达到10跳回主函数,重新赋值为0 DELAY: MOV R2,#05H ;延时D2: MOV R3,#0FFHD3: MOV R4,#0FFHDJNZ R4,$DJNZ R3,D3DJNZ R2,D2RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数值1到9的共阳极编码END六、结果:数码管循环显示0、1、2、3、4、5、6、7、8、9。
单片机作业单只数码管循环显示0~9
单只数码管循环显示0~9学生学号:学生姓名:同组学号:同组姓名:单只数码管循环显示 0~9一、本课题剖析本次课程设计任务为:利用51 单片机、 BCD译码芯片和一位 LED组成一个数码管扫描显示系统,一个数码管同时循环显示0~9。
并依据设计任务的要求编写程序,在 PROTEUS 7.5中绘制电路原理图。
而后在PROTEUS 7.5下进行仿真,实现相应功能。
二、硬件设计原理2.1 Proteus软件介绍Proteus 软件是英国 Labcenter electronics企业第一版的EDA工具软件(该软件中国总代理为广州风标电子技术有限企业)。
它不单拥有其余EDA工具软件的仿真功能,还可以仿真单片机及外头器件。
它是当前最好的仿真单片机及外头器件的工具。
固然当前国内推行刚起步,但已遇到单片机喜好者、从事单片机教课的教师、致力于单片机开发应用的科技工作者的喜爱。
Proteus 是世界上有名的 EDA工具 ( 仿真软件 ) ,从原理图布图、代码调试到单片机与外头电路协同仿真,一键切换到PCB设计,真实实现了从观点到产品的完好设计。
是当前世界上独一将电路仿真软件、PCB设计软件和虚构模型仿真软件三合一的设计平台,其办理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、 8086 和 MSP430等, 2010 年马上增添 Cortex 和 DSP系列办理器,并连续增添其余系列办理器模型。
在编译方面,它也支持IAR、 Keil 和 MPLAB等多种编译器。
2.2原理图绘制说明本次设计的数码管0~9 循环系统是以 80C51单片机为中心器件,利用Keil进行程序编写,后由单个LED显示数字循环,致使达就任务要求。
电路原理图的设计与绘制是整个电路设计的基础。
电路原理图的设计包含:设置电路图的图纸大小;规划电路图的整体布局;在图纸上搁置元器件,进行布局和布线;依据需要增添说明并进行检查与改正,最后保留。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单只数码管循环显示0-9
报告
设计题目:单只数码管循环显示0~9
设计要求:单片机控制1只数码管,循环显示0~9
需求分析:本设计要求单只数码管循环显示0~9,这里采用的是共阴极数码管。
让数码管显示数字的步骤为:
1)使数码管的公共端接地(共阴极)上。
2)将显示码送到单片机的P0口,向数码管的各个段输出不同的电平,使单个数码管循环显示0-9这10个数字。
复位电路:
在上电或复位过程中,控制
CPU的复位状态:这段时间内
让CPU保持复位状态,而不是
一上电或刚复位完毕就工作,
防止CPU发出错误的指令、执
行错误操作,也可以提高电磁
兼容性能。
无论用户使用哪种类型的单片
机,总要涉及到单片机复位电
路的设计。
而单片机复位电路
设计的好坏,直接影响到整个
系统工作的可靠性。
许多用户
在设计完单片机系统,并在实
验室调试成功后,在现场却出
现了“死机”、“程序走飞”等
现象,这主要是单片机的复位
电路设计不可靠引起的。
基本的复位方式
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
设计原理:
一、数码管显示原理
我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
共阳极的数码管0~f的段编码是这样的:
unsigned char code table[]={ //共阳极0~f数码管编码
0xc0,0xf9,0xa4,0xb0,//0~3
0x99,0x92,0x82,0xf8,//4~7
0x80,0x90,0x88,0x83,//8~b
0xc6,0xa1,0x86,0x8e //c~f
};
共阴极的数码管0~f的段编码是这样的:
unsigned char code table[]={//共阴极0~f数码管编码
0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x77,0x7c, //8~b
0x39,0x5e,0x79,0x71 //c~f
};
二、驱动方式
静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O 脚进行驱动,或者使用如BCD码二-十进位*器*进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O脚多,如驱动5个数码管静态显示则需要5×8=40根I/O脚来驱动,故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。
、由于单片机的IO口的驱动能力有限,而数码管点亮时需要较大的电流,所以在用单片机构成数码管显示系统时,需要增加驱动电路来输出较大的电流,驱动电路如下图
设计原理图:
程序流程图:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的字符码void delay(uint z) //延时函数,以毫秒为单位。
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
uint i;
for(i=0;i<10;i++)//循环显示0-9
{
P0=table[i]; //依次送入0-9的字符码
delay(500); //延时500毫秒,调用延时函数。
}
}
}
结论与心得
本次设计要求比较简单,做起来较容易一些。
但在实际过程中也遇到了一些问题,首先是仿真时的连线,看似简单,却很容易连错,致使数码管某一段不能发光。
再有就是KEIL与PROTEUS7.5的联合使用,调试程序时一定要生成HEX文件。
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且还学会了了两种有用的软件。
我做的这个设计主要是用AT89C51这个芯片来实现,这个芯片具有很多优点,程序简单易读,结构清楚,最重要的是成本低。
很适合我们学生用来学生。
在做这个设计的过程中,我也了解到了自己的不足,在日后的学习中,我还需加倍努力学习。