单只数码管循环显示0-9

合集下载

数码管的显示的实验报告

数码管的显示的实验报告

数码管的显示的实验报告数码管的显示的实验报告引言:数码管是一种常见的数字显示装置,广泛应用于各种电子设备中。

本实验旨在通过实际操作,了解数码管的原理和工作方式,并通过一系列实验验证其显示效果和功能。

实验一:数码管的基本原理数码管是由多个发光二极管(LED)组成的,每个发光二极管代表一个数字或符号。

通过对不同的发光二极管进行点亮或熄灭,可以显示出不同的数字或符号。

本实验使用的是共阳数码管,即共阳极连接在一起,而阴极分别连接到控制芯片的输出引脚。

实验二:数码管的驱动电路为了控制数码管的显示,需要使用驱动电路。

常见的驱动电路有共阴极驱动和共阳极驱动两种。

本实验使用的是共阳极驱动电路。

驱动电路由控制芯片、电阻和电容组成。

控制芯片通过控制输出引脚的高低电平来控制数码管的点亮和熄灭。

实验三:数码管的显示效果通过控制芯片的输出引脚,可以实现数码管的显示效果。

本实验使用的是四位数码管,可以显示0-9的数字。

通过改变控制芯片输出引脚的电平,可以控制数码管显示不同的数字。

实验中通过编写程序,使数码管显示从0到9的数字循环显示,并通过按键控制数字的增加和减少。

实验四:数码管的多位显示除了显示单个数字外,数码管还可以实现多位显示。

通过控制不同位数的数码管,可以显示更多的数字或符号。

本实验使用的是四位数码管,可以同时显示四个数字。

通过编写程序,可以实现四位数码管的多位显示,例如显示当前时间、温度等信息。

实验五:数码管的亮度调节数码管的亮度可以通过改变驱动电路中的电阻值来实现。

本实验通过改变电阻值,调节数码管的亮度。

实验中通过编写程序,通过按键控制数码管的亮度增加和减少,从而实现亮度的调节。

结论:通过本次实验,我们深入了解了数码管的原理和工作方式。

数码管可以通过驱动电路的控制,实现数字和符号的显示。

同时,数码管还可以实现多位显示和亮度调节。

数码管作为一种常见的数字显示装置,具有广泛的应用前景,可以应用于各种电子设备中。

通过进一步的研究和实践,我们可以更好地利用数码管的功能,满足不同应用场景的需求。

(整理)单片机C语言程序设计实训100例

(整理)单片机C语言程序设计实训100例

《单片机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 intvoid 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此后变红灯,东西向变绿灯,如此重复。

《单片机C语言程序设计实训100例—基于8051+Proteus仿真

《单片机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此后变红灯,东西向变绿灯,如此重复。

单只数码管循环显示0-9

单只数码管循环显示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〕连在一起,而各自的公共端称为位选线。

单只数码管循环显示0~9

单只数码管循环显示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仿真(前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位数码管Proteus仿真实验方法

1位数码管Proteus仿真实验方法
4
MAIN: MOV R0,#0 MOV DPTR,#TABLE MAIN1: MOV A,R0 MOVC A,@A+DPTR MOV P2,A CALL DELAY INC R0 CJNE R0,#10,MAIN1 MOV R0,#0 JMP MAIN
DELAY: MOV R2,#20 X2:MOV R3,#40 X1:MOV R4,#250 DJNZ R4,$ DJNZ R3,X1 DJNZ R2,X2 RET
TABLE: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 通过对比上述两个程序,可以发现,其实第二个程序没有第一个程序短太多, 但是第二个程序的拓展性比第一个程序好,只要修改程序中的几个参数,程序行 没有增加,就可以将显示内容修改为 0-9、A-F。而程序 1 如果想实现相同的功 能,只能继续增加程序行。因此在进行编程的时候,一定要根据程序的特点,选 择不同的编程形式,选择了恰当的编程形式,能够很大程度上的简化程序。 也可以使用 C 语言进行编程,其编程思路与汇编语言类似,这里不再赘述。 参考程序如下: #include <reg52.h> #define uchar unsigned char
DELAY: MOV R2,#20 X2:MOV R3,#40 X1:MOV R4,#250 DJNZ R4,$ DJNZ R3,X1 DJNZ R2,X2 RET
END 这种编程方法的优点是,程序简单,适合新手使用。程序修改容易,可以直 接进行任意修改以及增加。其缺点是程序冗长,显示内容较多时,程序书写工作 量大。 另外一种编程方法是查表发,将需要显示的内容预先写入单片机片内 ROM 中,当需要哪个段码直接从 ROM 中读取,并送至 I/O 口进行显示。这种方法编 写的程序较上述程序要简单很多。参考程序如下: ORG 0H JMP MAIN ORG 30H

单只数码管循环显示0~9

单只数码管循环显示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,%为取余数算符}}。

1位数码管的静态动态显示代码

1位数码管的静态动态显示代码

1位数码管的静态动态显示代码1. 什么是1位数码管?1位数码管,也称为单位数码管,是一种用于显示数字的电子元件。

它由七段数码组成,七段分别代表数字的不同部分,通过对不同的段点亮或熄灭,可以显示任意数字。

2. 1位数码管的静态显示静态显示是指将数码管显示为固定的数字,不发生变化。

实现静态显示的最简单方法是使用开关电路和逻辑门电路。

以下是一种常见的静态显示电路:1.使用开关电路控制:将数码管的七个段分别连接到对应的开关上,通过打开或关闭开关,来控制每个段的点亮或熄灭状态。

2.使用逻辑门电路控制:将数码管的七个段分别连接到逻辑门电路的输入端,通过逻辑门的组合及输入信号的控制,来控制每个段的点亮或熄灭状态。

通过上述电路的控制,可以将数码管的显示固定为特定数字,实现静态显示的效果。

3. 1位数码管的动态显示动态显示是指将数码管显示为一组数字的连续变化,通常用于显示时间、计数等功能。

要实现动态显示,需要通过定时器或计数器等设备来控制信号的变化。

以下是一种常见的动态显示电路:1.使用定时器控制:将数码管的七个段分别连接到定时器的输出端,通过设定定时器的周期和频率,可以控制数码管的显示更新速率。

2.使用计数器控制:将数码管的七个段分别连接到计数器的输出端,通过计数器的计数功能,可以控制数码管显示的数字。

通过对定时器或计数器的设置,可以实现数码管的动态显示,数字可以按照一定的顺序进行变化,从而实现不同的功能。

4. 1位数码管的控制代码下面是一个示例的Arduino控制代码,用于实现1位数码管的静态和动态显示:// 定义数码管的七个段引脚int segA = 2;int segB = 3;int segC = 4;int segD = 5;int segE = 6;int segF = 7;int segG = 8;// 定义数码管的四个位引脚int digit1 = 9;int digit2 = 10;int digit3 = 11;int digit4 = 12;// 定义数码管显示的数字int num = 0;// 数码管数字的对应状态int numbers[10][7] = {{1, 1, 1, 1, 1, 1, 0}, // 数字0{0, 1, 1, 0, 0, 0, 0}, // 数字1{1, 1, 0, 1, 1, 0, 1}, // 数字2{1, 1, 1, 1, 0, 0, 1}, // 数字3{0, 1, 1, 0, 0, 1, 1}, // 数字4{1, 0, 1, 1, 0, 1, 1}, // 数字5{1, 0, 1, 1, 1, 1, 1}, // 数字6{1, 1, 1, 0, 0, 0, 0}, // 数字7{1, 1, 1, 1, 1, 1, 1}, // 数字8{1, 1, 1, 0, 0, 1, 1} // 数字9};void setup() {// 配置数码管引脚为输出模式pinMode(segA, OUTPUT);pinMode(segB, OUTPUT);pinMode(segC, OUTPUT);pinMode(segD, OUTPUT);pinMode(segE, OUTPUT);pinMode(segF, OUTPUT);pinMode(segG, OUTPUT);pinMode(digit1, OUTPUT);pinMode(digit2, OUTPUT);pinMode(digit3, OUTPUT);pinMode(digit4, OUTPUT);}void loop() {// 数码管静态显示digitalWrite(segA, numbers[num][0]);digitalWrite(segB, numbers[num][1]);digitalWrite(segC, numbers[num][2]);digitalWrite(segD, numbers[num][3]);digitalWrite(segE, numbers[num][4]);digitalWrite(segF, numbers[num][5]);digitalWrite(segG, numbers[num][6]);digitalWrite(digit1, HIGH);digitalWrite(digit2, LOW);digitalWrite(digit3, LOW);digitalWrite(digit4, LOW);delay(1000); // 延时1秒// 数码管动态显示for (int i = 0; i < 10; i++) {digitalWrite(segA, numbers[i][0]);digitalWrite(segB, numbers[i][1]);digitalWrite(segC, numbers[i][2]);digitalWrite(segD, numbers[i][3]);digitalWrite(segE, numbers[i][4]);digitalWrite(segF, numbers[i][5]);digitalWrite(segG, numbers[i][6]);digitalWrite(digit1, LOW);digitalWrite(digit2, HIGH);digitalWrite(digit3, LOW);digitalWrite(digit4, LOW);delay(500); // 延时0.5秒}}上述代码首先定义了数码管的引脚和显示的数字,然后在setup()函数中配置引脚为输出模式。

《一位LED数码管显示0-9》

《一位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”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例

名称:花样流水灯 说明:16 只 LED 分两组 按预设的多种花样变换显示 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar 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,

数码管动态扫描显示实验综述

数码管动态扫描显示实验综述

实验三定时器和中断实验一、实验目的1、学习51单片机内部定时器的使用方法。

2、掌握中断处理程序的方法。

3、掌握数码管与单片机的连接方法和简单显示编程方法。

4、学习和理解数码管动态扫描的工作原理。

二、实验内容1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。

2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。

3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。

4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。

三、实验电路图四、实验说明1、数码管的基本概念(1)段码数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。

本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。

公共端1控制左面的数码管;公共端6控制右面的数码管。

正面看数码管的引脚、段选线和数据线的对应关系为:图1 数码管封装图图2 数据线与数码管管脚连接关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)(2)位码位码也叫位选,用于选中某一位数码管。

在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。

位码与段码一样和硬件连接有关。

(3)拉电流与灌电流单片机的I/O 口与其他电路连接时,I/O 电流的流向有两种情况:一种是当该I/O 口为高电平时,电流从单片机往外流,称作拉电流;另一种是该I/O 口为低电平时,电流往单片机内流,称为灌电流。

一般I/O 的灌电流负载能力远大于拉电流负载能力,对于一般的51 单片机而言,拉电流最大4mA,灌电流为20mA。

一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。

本实验电路中采用拉电流方式(用共阴数码管)。

按键控制1位LED数码管显示0-9

按键控制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 数码显示器有共阳极和共阴极两种结构形式。

由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。

Arduino入门教程(17)—数码管显示

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 的数字。

程序设计实训100例(最全)

程序设计实训100例(最全)
#define uint unsigned int
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延时
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
//延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//交通灯切换
void Traffic_Light()
{
switch(Operation_Type)
{
case 1://东西向绿灯与南北向红灯亮
RED_A=1;YELLOW_A=1;GREEN_A=0;
《单片机

01闪烁的LED
/*名称:闪烁的LED
说明:LED按设定的时间间隔闪烁
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED=P1^0;
//延时
void DelayMS(uint x)
{
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,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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这个芯片来实现,这个芯片具有很多优点,程序简单易读,结构清楚,最重要的是成本低。

很适合我们学生用来学生。

在做这个设计的过程中,我也了解到了自己的不足,在日后的学习中,我还需加倍努力学习。

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,
供参考,感谢您的配合和支持)。

相关文档
最新文档