基于STC51单片机的计数器

发布者:自由探索者最新更新时间:2024-04-15 来源: elecfans关键字:STC51  单片机  计数器 手机看文章 扫描二维码
随时随地手机看文章

设计要求:#

写出矩阵键盘的驱动


分别按下对应的键。数码管会将键盘对应的值累加并显示


设计概述:#

  按照设计要求,所需要的单片机芯片为STC89C52,所用的硬件工具是由华清远见开发的基于STC89C52的智能小车。该小车配备所需要的矩阵按键模块和数码管模块,矩阵按键模块由P3口控制,数码管模块位选P2.7口控制,段选由P2.6口控制,数字显示由P0口控制。STC89C52是一种低功耗,高性能的8位微控制器,是加强版的80C51单片机。


矩阵键盘:4x4矩阵键盘共有16个按键,每个按键的左端都连接在一根线上形成行线,每个按键的右端也都连接在一根线上形成列线。P3口的低4位分别于行线连接,高4位分别与列线连接。通过扫描矩阵键盘中按键两端的电平变化来准确识别其中的按键。


源代码:#

#include

#define uint unsigned int

#define uchar unsigned char


sbit WELA = P2^7; //定义位选IO口

sbit DULA = P2^6;//定义段选IO口


void matrix_key_scan();

void delay_ms(uint ms);

void sum_key();

void display_num(unsigned int num);

void display_digit(unsigned char wela,unsigned char dula);


uint key_value = 0; //定义全局变量保存键值

uint keynum1 = 0;

uint keynum2 = 0;


//数码管0-9段选编码

uchar code Du[] = {0x3f,0x06,0x5b,0x4f,

                   0x66,0x6d,0x7d,0x07,

                   0x7f,0x6f}; 


/*-----矩阵键盘扫描函数-----*/

void matrix_key_scan()

{

   uchar temp;

   uchar a = 0;

   P3 = 0x0f;//将所有行电平拉高,列电平拉低,进行行扫描

   temp = P3;

   if(temp != 0x0f)//检测是否有键按下

   {

       delay_ms(5);//延时去抖

   if(temp != 0x0f)//再次确认按键按下

   {

      P3 = 0x0f;//将所有行电平拉高,列电平拉低,进行行扫描

          temp = P3;

  switch(temp)

  {

     case 0x0e:key_value = 0; //第1行

           break;

  case 0x0d:key_value = 4;  //第2行

           break;

case 0x0b:key_value = 8; //第3行

           break;

case 0x07:key_value = 12; //第4行

           break;

  }

  P3 = 0xf0;//将所有列电平拉高,行电平拉低,进行列扫描

          temp = P3;   

  switch(temp)

  {

  case 0xe0:key_value = key_value + 0;//第1列

           break;

  case 0xd0:key_value = key_value + 1;//第2列

           break;

             case 0xb0:key_value = key_value + 2;//第3列

           break;

case 0x70:key_value = key_value + 3;//第4列

           break;

  

  

  //这里需要延时200ms,因为矩阵键盘扫描函数在while循环中是不断执行

  //如果按下键后不松开或者松开键慢了,keynum2变量就会不断累加,

  delay_ms(200);

  keynum1 = key_value;![image](https://img2020.cnblogs.com/blog/2427665/202109/2427665-20210902095257265-732916178.jpg)

  keynum2 = keynum2 + keynum1;


  }

}

   

   while((a < 50)&&(temp != 0xf0))//等待按键释放

   {

       a++;

   }

}


/*-----毫秒级延时函数-----*/

void delay_ms(uint ms)

{

   volatile uint i,j;

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

   {

      for(j=0;j<110;j++);

   }

  

}


/*--------数码管显示数字函数---------*/

void display_num(unsigned int num)

{

unsigned int div = 0;

unsigned char rema = 0;

unsigned char index = 0;

while((div = num / 10) > 0)

{

rema = num % 10;

display_digit(index,rema);

num = div;

index++;

delay_ms(2);

}

rema = num % 10;

display_digit(index,rema);

}


/*-------数码管位选函数-------*/

void display_digit(unsigned char wela,unsigned char dula)

{

WELA = 1;// 位选端锁存器置高,送数据

P0 = 0xFF;//消影

P0 &= ~(1 << (7 - wela));//1000 0000   0111 1111

WELA = 0;// 位选端锁存器置低,保存数据


DULA = 1;// 段选端锁存器置高,送数据

P0 = Du[dula];//送数据

DULA = 0;// 段选端锁存器置低,保存数据

}


void main()

{

while(1)   

{  

   matrix_key_scan();

   display_num(keynum2);

  }

}

小车部分原理图:#

image

image


关键字:STC51  单片机  计数器 引用地址:基于STC51单片机的计数器

上一篇:软件模拟实现iic协议(51为例)
下一篇:基于STC51单片机的风扇

推荐阅读最新更新时间:2024-11-12 16:32

基于单片机仿真器的设计详解
  仿真器是什么   仿真器(emulator)以某一系统复现另一系统的功能。与计算机模拟系统(Computer Simula TI on)的区别在于,仿真器致力于模仿系统的外在表现、行为,而不是模拟系统的抽象模型。   仿真器可以替代你的目标系统中的MCU,仿真其运行。 仿真器运行起来和实际的目标处理器一样,但是增加了其它功能,使你能够通过桌面计算机或其它调试界面来观察MCU中的程序和数据,并控制MCU的运行。   单片机仿真器的作用   单片机仿真器是一种在电子产品开发阶段代替单片机芯片进行软硬件调试的开发工具。配合集成开发环境使用仿真器可以对单片机程序进行单步跟踪调试,也可以使用断点、全速等调试手段,并可观察各种变量、RAM
[单片机]
基于<font color='red'>单片机</font>仿真器的设计详解
国芯科技:新一代汽车电子域控制MCU产品内测成功
国芯科技11月3日公告,公司研发的新一代汽车电子域控制MCU产品“CCFC2016BC”于近日在公司内部测试中获得成功。 图源:官方 汽车电子域控制芯片产品CCFC2016BC是基于公司自主 PowerPC架构C*Core CPU内核研发的新一代汽车电子域控制芯片,是在已有 CCFC2012BC芯片基础上根据客户需求对功能的进一步增强和完善。
[汽车电子]
国芯科技:新一代汽车电子域控制<font color='red'>MCU</font>产品内测成功
乐鑫科技:Wi-Fi MCU市场份额持续领先,已布局高端 MCU 市场
近日,乐鑫科技在接受机构调研时表示,公司有在研发低功耗蓝牙MCU产品线。在通用 MCU 上,我们目前的Wi-Fi MCU产品线的市场份额持续领先,后续会有高端MCU的规划,主要提升AI和计算能力。 其进一步称,算力只是其中一部分,而软件的隐形作用非常大。在大家能做出同等算力的硬件情况下,整体的口碑需要靠软件。所以未来还是要看软件带来的价值。乐鑫科技的一大特色是在软件上的研发投入。公司研发了自己的软件操作系统、软件开发框架、云方案等。乐鑫科技的硬件产品搭配软件方案,可以达到与更高算力硬件的相似效果,这就是软硬件一体化的优势。而同时公司还具备产品成本优势。 对于公司ESP32-C3、ESP32-C2产品线,乐鑫科技表示,“ESP32-
[手机便携]
基于单片机的液压动力钳检测系统研究与实现
在油田钻修作业中起下钻杆、钻具、油套管时,上卸螺纹的专用工具是液压动力钳。液压动力钳在钳口卡紧机构动作夹紧后,外供的压力油控制液压马达转动,液压马达通过内部机构带动钳口转动,液压马达可以正转或者反转,从而实现油管的上紧或卸下。 上扣时须严格控制扭矩,上扣扭矩直接影响螺纹上扣质量。使用液压动力钳上紧螺纹时,扭矩过大会造成螺纹无法拆卸,严重时,会产生裂纹,从而降低整个管柱的强度,同时会造成液压动力钳因负荷过重而损坏甚至报废;扭矩过小会造成管柱密封不好或脱落,导至整个作业工程的返工,而且往往难以追查责任。 针对上述问题,解决方案目前主要有:对液压动力钳增加扭矩保护装置或扭矩检测装置,文中设计基于AT89C55WD的扭矩检测系统,不需
[单片机]
基于<font color='red'>单片机</font>的液压动力钳检测系统研究与实现
esp8266加入到c51单片机单通道程序的编写
at89c2051单片机,晶振11.096MHZ,通讯速率9600,TCP多连接方式,本地连接地址192.168.1.107,收发数据成功 汇编程序如下: 这是main.c #include #include #include usart.h #include wifi.h char Recive_table = ; //接收缓冲,最大20个字节 char Recive_state = 0; //接收完成标志 int main (void) { /********************功能初始化***********************/ Uart _Init();//串口初始化,波特率为9600 ms_dela
[单片机]
单片机逻辑或ORL和逻辑异或XRL指令实例详解
在知道了逻辑与 指令 的功能后,逻辑或和逻辑异或的功能就很简单了。逻辑或是按位“或”,即有“1”为1,全“0”为0。例: 10011000 或 01100001 结果 11111001 而异或则是按位“异或”,相同为“0”,相异为“1”。例: 10011000 异或 01100001 结果 11111001 而所有的或指令,就是将与指仿中的ANL 换成ORL,而异或指令则是将ANL 换成XRL。即 或指令: ORL A,Rn ;A和Rn中的值按位'或',结果送入A中 ORL A,direct ;A和与间址寻址单元@Ri中的值按位'或',结果送入A中 ORL A,#data ;
[单片机]
AVR单片机8位数码管显示的程序实现
我们接着来完成 数码管的显示实验。现在我们开始动手编写程序; 根据前面的介绍,我们应该已经能够知道编写一个 的C语言程序的基本步骤和方法了。 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句、 的定义、函数的声明、主函数、函数定义。如果你还不能够准确找出这几部分,那么需要把前面的内容再详细阅读一下。 主程序代码 #include /io.h //io端口寄存器配置文件,必须包含 #include util/delay.h //GCC中的延时函数头文件 #include hc .h //unsigned char Led_Dis
[单片机]
【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(3)NVIC 介绍
NVIC(Nested vectored interrupt controller,嵌套向量中断控制器)是Cortex-M处理器的一部分,它是可编程的,且寄存器位于存储器映射的系统控制空间(SCS)。NVIC与内核相辅相成,共同完成对中断的响应。本章将介绍中断的优先级设置、如何定义中断函数名称、中断向量如何偏移。有关NVIC的更多知识,请见《ARM Coretex-M3权威指南》。 3.1.优先级的设置 在Cortex-M中,优先级对于异常来说很关键的,它会影响一个异常是否能被响应,以及何时可以响应。优先级的数值越小,则优先级越高。Cortex-M支持中断嵌套,使得高优先级异常会抢占低优先级异常。有3个系统异常:复位,NMI以
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】GD32 <font color='red'>MCU</font> 常见外设介绍(3)NVIC 介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved