产品概述

单片机循环显示 单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

小编 2024-10-13 产品概述 23 0

单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

想要学习单片机必须要准备单片机开发板一块,和单片机C语言版本的书籍,我会把每天录制视频的源代码到头条,并且录制相同文章名字视频到西瓜视频,如果你再学习独立按键这一块有不明白的地方可以点开我的头像,进入我的主页,点击视频观看学习。

目前视频录制了9个左右,没学过的结合书本,结合我的视频,都可以学会。

话不多说先上今天的仿真效果图:

然后下面是本仿真图的源代码:如果有错误,请大神指教。

#include<reg52.h> //头文件,把芯片的数据地址编译成C语言可以调用的句子。

#define uchar unsigned char //宏定义 把后面的长句 给他们一个新定义,实现同样的功能。

#define uint unsigned int //宏定义 把后面的长句 给他们一个新定义,实现同样的功能。

sbit dula=P2^0; //把p2.0给他一个新名字叫dula 用于数码管锁存器段选位置

sbit wela=P2^1;//把p2.1给他一个新名字叫wela 用于数码管锁存器位选的位置

sbit key1=P3^0; //同样的,给按键1和按键2分别找两个串行口来对接。

sbit key2=P3^1;

uchar code table[]={0x3f,0x06,0x5b,0x4f, //定义的一个数码管的编码表。

0x66,0x6d,0x7d,0x07, //阴极数码管

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delayms(uint); //延时子程序

void display(uchar,uchar); //显示子程序

void keyscan(); //独立按键子程序

uchar num,shi,ge,num1; //定义四个无符号字符

void main() //主程序

{

TMOD=0x01; //中断确定工作方式,和选择定时器0

TH0=(65536-45872)/256; //装初值,

TL0=(65536-45872)%256; //对这一块不太明白的,可以看我上一个视频

EA=1; //开启总的中断

ET0=1; ////开启定时器/计数器寄存器中断 开启中断具体定时器中断

while(1) //循环式判断,

{

keyscan(); // 调用按键子程序,对按键子程序进项不断地扫描

display(shi,ge);//调用显示子程序,对显示子程序,进行不断地刷新显示

}

}

void display(uchar shi,uchar ge) //显示子函数,并且调用形式参数

{

P0=0x00; //为了在仿真电路让P0口没有其他的数据来影响段选显示的/阴极数码管,高电平有效。让数码管变得干净。

dula=1; //锁存器开

P0=table[shi]; 把十位的数字送到P0

dula=0; //锁存器关闭// 段选位置

P0=0XFF; //低电平有效,让位选的位置变得干净。

wela=1; //位选锁存器开启。//低电平有效。

P0=0xfe;//送入位选的 选位。

wela=0; 位选锁存器关闭。

delayms(5); /延时5毫秒。

P0=0x00;

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

wela=1;

P0=0xfd; //选择数码管的第一个位置 来显示数字

wela=0;

delayms(5);

}

void delayms(uint xms) //延时子程序

{

uint i,j; //定义两个无符号字符

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void keyscan() //今天的重点:按键扫描子程序

{

if(key1==0) //判断按键1 有没有按下

{

delayms(10); //延时10毫秒,延时去抖动

if(key1==0) //在判断一次按键1有没有按下

{

while(!key1); //等待按键释放,如果没有释放那么按键始终等于0,也就是低电平。按键按下去了,

TR0=~TR0; //定时器的开启与关闭,开启 开始计数,关闭就会暂停

}

}

if(key2==0) //判断按键2是否按下

{

delayms(10); //延时去抖动

if(key2==0) //再次判断

{

num1=0;// num1是送给数码管的数值,0-60根据定时器变化的值。

while(!key2);//判断按键2时候松开,没有松开始终等于低电平。

}

}

}

void T0_time() interrupt 1 //定时器的子程序

{

TH0=(65536-45872)/256; //重装初值,这一块如果听不懂,可以去看上个视频。

TL0=(65536-45872)%256;

num++;

if(num==20) //定时器每次50毫秒,这里加个20次的循环,用来凑足1秒钟。

{

num=0;

num1++;

if(num1==60) //给num1进行每一秒钟数值变化送数值。

num1=0;

shi = num1/10; //求模的数,送到shi

ge = num1%10;

}

}

扫盲教程:深入浅出讲解单片机控制单只数码管循环显示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);

}

}

}

好了以上就是单片机控制数码管显示的全部内容了,本文从软件和硬件两个角度分别讲解,如果有任何意见或者需要设计文件 欢迎留言或者私信,如果你也对单片机感兴趣,那么快点行动起来吧!我们下期再见!

相关问答

单片机 控制32盏灯 循环显示 ?

按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统。8051单片机是Intel公司生产的,除无片内ROM外,其余特性与MCS-51...

为什么在 单片机 实验板上点亮一个LED灯时,需要while(1) 循环 ,要不然其他LED灯会微亮?

任何单片机程序都要有一个死循环,否则程序执行到底了,然后怎么办。没有这个死循环,单片机从0地址重新运行,整个系统重新初始化,会导致IO口复位,运行的很快...

51 单片机 移位 循环 指令?

51单片机有4条循环移位指令,包括左移RLA、RLCA和右移RRA、RRCA。这两种循环指令都是针对累加器A进行操作,特点都是循环位移,区别是方向不同。以左移的两...

如何设计一个 单片机 可控的 循环 流水灯?

首先在硬件方面,我们使用了最经典的选型用AT89S51单片机作为主控芯片,LED电路选用共阳极接法:8路红色LED灯正极接5V电源、各路串联一个限流电阻,保护发光二...

单片机 怎样跳出while(1)无限 循环 ?

可用break跳出循环,break语句可跳出任何的循环;因为你这个while(1)是死循环,所以得用break,除非你将1改成其它条件。可用break跳出循环,break语句可跳出任何...

51 单片机 怎么样让某个程序 循环 3次?

在51单片机中,可以通过使用循环语句来实现某个程序循环3次的效果。首先,明确结论是通过循环语句实现程序循环3次。其次,原因是因为循环语句可以让程序重复执行...

pic 单片机 指令左右 循环 是怎么回事

在这里介绍一种定时程序,说明循环程序在PIC单片机上的应用。笔者仍以PIC16F84单片机为例建立其定时源程序清单。该定时器源程序只需改变一条指令的...

单片机循环 移位指令中A=7AH?

首先,RLC表示A带进位标志(CY)循环左移一次,相当于乘以2;进位标志CY=1,则A=7AH=123D(十进制的123)的带进位标志用二进制表示为101111010,将其整体...首先,R....

单片机 中的LOOP是什么?

一种循环的标示,由自己决定这个的标示(类似地名),比如我一个AJMP跳转指令需要跳转到一个地方,那我就自己定一个标示(LOOP是自己定义的,可以改成别的也行,...

单片机 是89c51采用定时器T0的方式1的定时中断方式初始状态...

[最佳回答]是要汇编呀,早不说,做了C的.

猜你喜欢