C51单片机用数码管如何显示0~9?
任务描述
某企业承担了一个LED数码显示设计任务;他们要求单片机控制一个数码管显示0→1→2→3→4→5→6→7→8→9,每个状态停留1秒。请你们用C51单片机设计其控制系统并调试运行。
仿真视频
C51单片机|数码管显示0~9
硬件电路原理图
电路原理图
C语言程序
#include<reg51.h>//包含头文件reg51.h
void delay1s();//延时函数声明
unsigned char LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管0~9的段码数组
void main()//主函数
{
unsigned char i;
TMOD=0X10;
while(1)
{
for(i=0;i<10;i++)//for循环10次
{
P1=LED[i];//从P1端口输出数码管的段码
delay1s();//延时1s
}
}
}
void delay1s()//延时函数
{
unsigned char i;
for(i=0;i<20;i++)
{
TH1=0X3C;
TL1=0xb0;
TR1=1;
while(!TF1);
TF1=0;
}
}
扫盲教程:深入浅出讲解单片机控制单只数码管循环显示0~F
最近有好多小伙伴留言说,我发的项目很难,他们都是刚入门的,希望我写一些入门级的教程,那么今天我就从硬件和软件两个方面来给大家讲一下最基本也是十分重要的电路 单片机驱动数码管显示电路。
要弄清楚单片机控制数码管显示字符的原理我们首先要知道:三个概念
单片机:通俗的讲单片机是一种集成电路芯片,利用一些特殊工艺把许多不同功能的模块集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。单片机可以烧进程序,然后从不同的IO口输出规定的电平信号。
七段数码管(如下图):
数码管是一类价格便宜 使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。一般的七段数码管拥有七个发光二极管(三横四纵)用以显示十进制0至9的数字外加小数点,也可以显示英文字母 A 至 F(b、d 为小写,其他为大写)。现时大部分的七段数码管会以斜体显示。
好了,上面是单片机和数码管的概念,下面说一下单片机的工作原理:
一个单片机要想能正常工作必须满足它工作的最小系统,这个最小系统包括,电源电路,晶振电路,复位电路等,当电源电路给单片机正常供电后,在上电的一瞬间会给复位电容充电从而完成上电复位的动作。单片机复位结束后,我们把需要控制数码管显示的代码烧进单片机,这时候单片机就会根据写的代码从不同的IO口输出不同的电平,从而控制七段数码管每一段的亮灭,而达到显示不同数字的目的。
好了说了半天理论了,下面我们开始实践一下吧!
首先用PROTEUS仿真软件画好单片机最小系统和LED数码管驱动原理图:本项目中用STC89C52
把程序烧进去以后,数码管开始从0到F显示,适当调整源代码参数可以修改显示不同的数字和不同的时间间隔。
51单片机参考源代码如下:
/*单只数码管循环显示0~F 作者 科技小伟1*/
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};
void delay(uint16 x)
{
uint16 i,j;
for(i = x; i > 0; i --)
for(j = 114; j > 0; j --);
}
void main()
{
uint8 i = 0;
while(1)
{
for(i = 0; i < 16; i ++) //i = (i + 1) % 16
{
P0 = LED_CODE[i];
delay(500);
}
}
}
好了以上就是单片机控制数码管显示的全部内容了,本文从软件和硬件两个角度分别讲解,如果有任何意见或者需要设计文件 欢迎留言或者私信,如果你也对单片机感兴趣,那么快点行动起来吧!我们下期再见!
相关问答
单片机数码管 动态 显示0 -100?给你简单的修改了一下,如果你的数码管编码没错,应该可以显示0~99的没添加百位显示,所以只有0~99//数码管动态显示+1,显示范围0-100,定时时间1s#include...
用C语言编写51 单片机显示数码管 00~ 99 频率可调程序(模块化)-Z...还可以提高下水平有用(0)回复novembermoon百度文库里面有我写的一个小程序...显示是用1602不是数码管。你可以只需要在我的程序上简单修改下就可以了。呵...
51 单片机 点亮 数码管[最佳回答]在主程序最后加一个while(1);
数字式电子秒表设计程序(max7219与 单片机 连接8位 数码管显示 )?你好!7219驱动两位数码管完成99秒计时,通过按键控制开始和复位你好!7219驱动两位数码管完成99秒计时,通过按键控制开始和复位
单片机 如何驱动 数码管 ?驱动数码管:静态显示,动态扫描两种方式。设置全局变量a,把a拆成个位十位以参数形式传给数码管显示函数。按键:方法1:主函数中查询K1、K2是否被按下(注...
{0xc0,0xf9,0xa4,0xb0,0x 99 ,0x92,0x82,0xf8,0_作业帮[最佳回答]这段代码是单片机MCS-51的c语言程序,整个程序实现的功能是通过单片机的三个管脚实现对按键显示.按键1(key1)每次按下去之后,会实现加1的操作,也就是...
新手如何入门 单片机 开发?在大学里有学了这么久的单片机。那如何利用单片机来设计一款产品呢?今天来和大家探讨一下。1制定需求首先要清楚你要做一个...是不是要显示界面?是不是要声光...
求一个51 单片机 定时闹钟程序。要C语言。能够调时间 - hL0lQS...P0=dispcode[hour10];//显示时的十位2113delay(1);P2=0x7f;P0=dispcode[hour1];//显示时的个位delay(1);}voidmain(){uns...
MOVA,#87HMOVA,# 99H (A)=20H,(CY)=1,(AC)=1,(OV)=1上述两数当...[最佳回答]87H=10000111B+99H=+10011001B+CY+1-------------------------------(1)20H100100000B上述...
求一个51 单片机 定时闹钟程序。要C语言。能够调时间 - 小红薯...我来发一个C语言211351单片机时钟程序,希望5261能帮到你/*程序功能:4102带定时闹铃时钟*//*-------...