首页 > 其他分享 >proteus+keil5仿真学习笔记(第二章 1位数码管计数器)

proteus+keil5仿真学习笔记(第二章 1位数码管计数器)

时间:2024-03-22 09:30:42浏览次数:510  
标签:计数 中断 void 数码管 proteus keil5 定时 外部

第二章 1位数码管计数器


前言

主要介绍数码管、 按键的应用, 并涉及单片机中断处理技术。

一、数码管的结构原理

数码管结构如下:

有两种数码管,根据接法不同分为共阴接法和共阳接法。 即 8 个管子公共端接地,称为共阴接法的数码管(common cathode);8 个管子公共端接电源,称为共阳接法的数码管(common anode)。

数码管的元器件名称“7SEG—”

由此,会有两种数码管的码段表:

字符共阴顺序, 小数点暗共阳顺序, 小数点暗
dp  g  f  e  d  c  b  a十六进制数dp  g  f  e  d  c  b  a十六进制数
0001111113F11000000C0
1000001100611111001F9
2010110115B10100100A4
3010011114F10110000B0
401100110661001100199
5011011016D1001001092
6011111017D1000001082
7000001110711111000F8
8011111117F1000000080
9011011116F1001000090
A01110111771000100088
B011111007C1000001183
C001110013911000110C6
D010111105E10100001A1
E01111001791000011086
F0111000171100011108E

二、按键应用

按键的元件名称是 BUTTON, 它的一端接单片机的引脚, 另一端接地。

可通过模式工具栏“A”增加提示文字。

仿真时可能会出现这样的问题:按键button如果在仿真前是闭合的,仿真时一直是闭合的 ,仿真前是断开的仿真时一直是断开的,按下去没有作用。

其实是因为:未运行前点击右上小圆点使按键闭合,右键属性再确定,运行时就是常闭的;按键默认是常开的,从常闭转到常开的操作同上。

三、中断处理

51单片机中断,可以参考https://blog.csdn.net/qq_51029592/article/details/119351347详细学习。本文就程序简要介绍。

89C52 单片机共有5个中断源,2个外部中断,2个定时/计数中断,和一个串口中断(用于通信)。外部中断的引脚是P3.2、P3.3,定时/计数的引脚是P3.4、P3.5,串口通信中断引脚是P3.6、P3.7。

外部中断至少需要用到两种寄存器:定时/外部中断控制寄存器TCON,和中断允许控制寄存器IE。

先看定时/外部中断控制寄存器TCON:

1)高4位用于定时器控制(D4~D7);

2)底4位用于外部中断控制(D0~D3);

3)IT0:外部中断0类控制,通过软件设置或清除;

4)IE0:外部边沿触发中断0类控制,由片内硬件自动清零;

5)IT1:外部中断1类控制,性质同IT0;

6)IE1:外部边沿触发中断1类控制,性质同IE0。

再看中断允许控制器IE:

1)EX0:外部中断0控制位(EX0=1允许中断,EX0=0禁止中断);

2)ET0:定时/计数T0中断控制位(ET0=1允许,ET0=0禁止);

3)EX1,ET1:外部中断1和定时/计数T1中断控制位,性质同EX0、ET0。

4)ES:串口中断控制位,ES=1允许,ES=0禁止;

5)EA:中断总控制位,EA=1开发,EA=0禁止;

中断处理编号
中断编号中断源
0外部中断0
1定时/计数0溢出中断
2外部中断1
3定时/计数1溢出中断
4串行口中断

定义中断服务函数

函数类型  函数名(形式参数)[interrupt n] [using m]

n:中断编号

m:寄存器组号

eg:void intersvr0(void) interrupt 0 using 1

四、程序设计及仿真

proteus电路

程序

该程序可以实现1~9的手动计数

#include < reg51.h >//单片机头文件
unsigned char code Tab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳数码管码段表
unsigned char p=0;//计数变量   
sbit S1=P3^2;//定义按钮S1
sbit S2=P3^3;//定义按钮S2
void delays(void)//延时子程序
{
	int i,j;
	for(i=300;i>0;i--)
	for(j=100;j>0;j--);
}

void main(void)//主程序
{
	while(1)//无限循环
	{
		P0=Tab[p];//输出码段表
	if(S1==0)//如果S1按下
	{
		p++;//计数加1
		delays();//延时
		if(p>9)//如果计数大于9
			p=9;//计数等于9
	}
	if(S2==0)//如果S2按下
	{
		p--;//计数减1
		delays();//延时
		if(p<1)//如果计数小于1
			p=1;//计数等于1
	}
}
}

主程序的主要工作就是判断按钮是否按下,并增加或减少数值来实现计数器的功能。如果在此基础上增加其他功能,就会增加程序的复杂度。因此,我们使用中断处理来简化程序。

#include < reg51.h >  
#define uchar unsigned char//简化变量定义
unsigned char code Tab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char p=1;
void delays(void)
{
	uchar i;
	for(i=300;i>0;i--);
}
void main(void)
{
	EA=1;//开总允许开关
	IT0=1;EX0=1;//开外部中断0和外部中断0允许分开关
	IT1=1;EX1=1;//开外部中断1和外部中断1允许分开关
	while(1)
	{
		P0=Tab[p];
		delays();
	}
}
void intersvr0(void) interrupt 0 using 1//外部中断0处理子程序
{
	p++;
	if(p>9)
		p=9;
}
void intersvr1(void) interrupt 2 using 1//外部中断1处理子程序
{
	p--;
	if(p<1)
	p=1;
}

总结

主要介绍数码管、 按键的应用, 并涉及单片机中断处理技术。该程序目前还是手动计数,下一章节在此基础上加上定时功能。

标签:计数,中断,void,数码管,proteus,keil5,定时,外部
From: https://blog.csdn.net/muling0504/article/details/136862977

相关文章

  • proteus+keil5仿真学习笔记(第三章 4位数码管计数器)
    第三章4位数码管计数器前言一、多位数码管显示程序二、定时器原理三、程序设计与仿真proteus电路程序总结前言4位数码管计数器与1位数码管计数器相比,增加了片选电路,以确定选择哪个数码管进行工作。单片机定时器的应用也与中断处理相似,需要设置一些规定的寄存器,以......
  • 基于EP4CE6F17C8的FPGA单数码管秒计数实例
    一、电路模块本例的电路模块与“基于EP4CE6F17C8的FPGA数码管动态显示实例”中的完全一样,此处就不再给出了。二、实验代码本例实现1个数码管循环显示字符1~F,显示间隔为1秒,代码使用Verilog编写,采用例化的形式,共有三个文件。先编写数码管实现显示字形解码的程序,模块名称为seg_de......
  • FPGA入门笔记008——数码管动态扫描设计与验证
    #FPGA入门笔记008——数码管动态扫描设计与验证1、数码管动态扫描原理​ 8段数码管的结构图如图1所示:图1——8段数码管结构图(a为共阴极,b为共阳极)​ 对于共阴数码管需要给对应段以高电平才会使其点亮,而对于共阳极数码管则需要给低电平才会点亮。AC620上板载的是共阳极数......
  • STM32 TIM3 定时器应用之数码管显示定时时间
     实现目标1、STM32基于HAL库定时器的使用;2、加强数码管的学习。一、定时器概述?1、生活中哪些场景会用到定时器?2、STM32F1定时器二、原理图设计三、STM32CubeMX配置1.定时器时钟配置2.定时器3、数码管、蜂鸣器的配置  3.开启定时器3中断四、程序......
  • libtorch实现一个数码管数字识别网络
    这里的数字范围是0~9共10个数字,用5×3的数字矩阵表示,把它当成图像那么可以看成5×3的图片。如下图中的数字0,用“1”代表有颜色(亮),“0”代表没颜色(灭)。网络是经典的BP神经网络,15个输入,10个输出。当输入是形状“0”时,输出索引为0的数字最大接近于1;当输入是形状“1”时,输出索引为1的......
  • 基于EP4CE6F17C8的FPGA数码管动态显示实例
    一、电路模块1、数码管开发板板载了6个数码管,全部为共阳型,原理图如下图所示,段码端引脚为DIG[0]~DIG[7]共8位(包含小数点),位选端引脚为SEL[0]~SEL[5]共6位。端口均为低电平有效。其实物图如下所示。数码管引脚分配见下表。2、时钟晶振开发板板载了一个50MHz的有源晶振,为系统......
  • 609、基于单片机的秒表(倒计时,数码管,独立按键)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括需要完整的资料可以点击下面的名片,找我要资源......
  • 学习C51单片机——独立按键控制数码管显示数字(学习笔记Keil5)
    学习C51单片机——独立按键控制数码管显示数字(学习笔记Keil5)文章目录学习C51单片机——独立按键控制数码管显示数字(学习笔记Keil5)1、按键控制数码管第一位显示数字22、按键控制数码管第一位按顺序显示数字0~91、按键控制数码管第一位显示数字2按键按下数码管第一位......
  • 学习C51单片机——动态数码管显示(学习笔记Keil5)
    学习C51单片机——动态数码管显示(学习笔记Keil5)文章目录学习C51单片机——动态数码管显示(学习笔记Keil5)1、延时函数2、数码管动态显示1、延时函数延时100msvoidDelay100ms(void) //@12.000MHz{ unsignedchardatai,j; i=195; j=138; do { while......
  • VK1650是LED数显/数码管显示驱动控制电路(IC),8*4共阴/4*8共阳
    概述VK1650是一种带键盘扫描电路接口的LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx4GRID的点阵LED显示。最大支持7x4按键。本芯片性能稳定质量可靠,抗干扰能力强,适用于24小时长期连续工作的引用场合。采用S......