龙空技术网

单片机之我见之数码管显示

幼儿分级阅读分享 510

前言:

当前兄弟们对“c语言编程单片机数码管”大致比较注意,大家都想要了解一些“c语言编程单片机数码管”的相关内容。那么小编在网上汇集了一些关于“c语言编程单片机数码管””的相关知识,希望各位老铁们能喜欢,大家快快来了解一下吧!

数码管在生活中的使用十分常见,主要提供数字的显示,如时钟显示,计数,家用电磁炉,电饭煲等等设备上都有其身影。数码管由7个LED发光二极管组合而成,7个发光二极管的负极相连在一起称为共阴,正极相连在一起称为共阳。

数码管/共阳及共阴

从上图来看,要想使数码管显示相应的数字,只要对应的发光二极管点亮就可以。如想显示数字2,以共阴极的来说,只要A、B、D、E、G对应的发光管阳极接电源,共阴极接地。这几个发光二极管就显示,对应在数码管上就显示数字2。用单片机来控制的话,可以对数码管ABCDEFG实现不同的电平切换,最终显示不同的数字,电路图如下:

共阴极的数码管显示电路

软件是硬件电路的心脏,能够调度所以的资源工作。本文将以以C语言为基础来编写程序达到控制数码管显示的目的。由于前几次都是在编程软件上写程序,拷贝到文章中,但发现效果不好,不容易理解。因此就在文中以简单通俗的语言进行程序的编写。应读者的要求,编写一个延时函数,是程序更为简单有效。

#include <reg51.h> //可以这么理解,这语句指的就是链接硬件和软件的桥梁

sbit leda=P0^0; //数码管中a的发光二极管连接单片机的P0^0管脚,用leda来代替P0^0

sbit ledb=P0^1; //数码管中b的发光二极管连接单片机的P0^1管脚,用ledb来代替P0^1

sbit ledc=P0^2; //数码管中c的发光二极管连接单片机的P0^2管脚,用ledc来代替P0^2

sbit ledd=P0^3; //数码管中d的发光二极管连接单片机的P0^3管脚,用ledd来代替P0^3

sbit lede=P0^4; //数码管中e的发光二极管连接单片机的P0^4管脚,用lede来代替P0^4

sbit ledf=P0^5; //数码管中f的发光二极管连接单片机的P0^5管脚,用ledf来代替P0^5

sbit ledg=P0^6; //数码管中g的发光二极管连接单片机的P0^6管脚,用ledg来代替P0^6

void delay( ); //延时函数的声明,所谓延时 就是等待,发呆

/********延时函数功能的实现****************************************

*******主要用于等待发呆,让LED灯闪烁的时间等待*************/

void delay( )

{

int ds=30000; //定义一个变量,用来控制延时时间。ds的值大小可以控制延时的时间

while(ds--); //循坏30000次发呆

}

/***下面进行主函数的编写*************************C语言程序最主要的就是主函数,

任何功能的实现都是在主函数里去实现,且是单片机程序的入口函数*********************/

void main( ) //主函数的定义

{

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0;//初始化LED灯,就是让数码管初始化,处于不亮的状态

while(1) //让程序一直循环,简称死循环

{

leda=1;ledb=1;ledc=1;ledd=1;lede=1;ledf=1;ledg=0; //显示数字0,让abcdef对应的LED亮,g对应的LED 不亮

delay( ); //调用延时函数,让数码管显示0保持一段时间

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0; //重新初始化,就是让数码管休息一下(消隐)

leda=0;ledb=1;ledc=1;ledd=0;lede=0;ledf=0;ledg=0; //显示数字1,让bc对应的LED亮,adefg对应的LED 不亮

delay( ); //调用延时函数,让数码管显示1保持一段时间

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0; //重新初始化,就是让数码管休息一下(消隐)

leda=1;ledb=1;ledc=0;ledd=1;lede=1;ledf=0;ledg=1; //显示数字2,让bc对应的LED亮,adefg对应的LED 不亮

delay( ); //调用延时函数,让数码管显示1保持一段时间

leda=0;ledb=0;ledc=0;ledd=0;lede=0;ledf=0;ledg=0; //重新初始化,就是让数码管休息一下(消隐)

//其他数字的显示相信读者会了,可以尝试编写

} //while的结束

} //主函数的结束

结束语:此程序目前实现了0和1、2的轮流显示。可以尝试写显示其他的数字。下图是仿真效果图

数码管显示2的效果图

标签: #c语言编程单片机数码管 #动态数码管显示c语言程序