基于普中单片机按键-数码管显示

简介

1.硬件部分
普中单片机开发板 数码管 独立按键
2.软件部分
keil软件

硬件部分

普中单片机开发板 数码管 独立按键

(这些都是开发板的最基本的配置)

软件部分


#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;
/*端口引脚定义*/
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit KEY1 = P3^0;
sbit KEY2 = P3^1;
/*变量定义*/
int number;
unsigned char KeyNum=0;   //被触发的按键编号
unsigned char KeyLock1=0;
unsigned char KeyLock2=0;
unsigned int cnt;/*函数声明部分*/
void KEY_Scan();
void KEY_Action();
void Light_Scan();
void delay(u16 i);
void Display();
void Time0Iint();
/*数码管码表*/
unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管显示0~F的值
unsigned char LightBuf[]={0xFF,0xFF,0xFF,0xFF,0XFF};
/*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}
/*******************************************************************************
* 函 数 名         : Display
* 函数功能         : 数码管显示部分
*******************************************************************************/
void Display()
{LightBuf[0]=smgduan[number%10];LightBuf[1]=smgduan[number/10%10];LightBuf[2]=smgduan[number/100%10];LightBuf[3]=smgduan[number/1000%10];LightBuf[4]=smgduan[number/10000%10];}
/*******************************************************************************
* 函 数 名         : Light_Scan()
* 函数功能         : 数码管扫描函数,选择显示的位置
*******************************************************************************/
void Light_Scan()
{u8 i;for(i=0;i<8;i++){switch(i)   //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0;P0=LightBuf[4];break;//显示第0位case(1):LSA=1;LSB=0;LSC=0;P0=LightBuf[3];break;//显示第1位case(2):LSA=0;LSB=1;LSC=0;P0=LightBuf[2];break;//显示第2位case(3):LSA=1;LSB=1;LSC=0;P0=LightBuf[1];break;//显示第3位case(4):LSA=0;LSB=0;LSC=1;P0=LightBuf[0];break;//显示第4位default: break;}delay(100); //间隔一段时间扫描  P0=0x00;//消隐}
}
/*******************************************************************************
* 函 数 名         : KEY_Scan()
* 函数功能         : 按键扫描函数
*******************************************************************************/
void KEY_Scan()
{static unsigned char cnt1 = 0xFF;static unsigned char cnt2 = 0xFF;cnt1 =(cnt1<<1)|KEY1;cnt2 =(cnt2<<1)|KEY2;if(cnt1 != 0x00){KeyLock1 = 0;}else if(KeyLock1==0){KeyNum = 1;KeyLock1 = 1;}if(cnt2 != 0x00){KeyLock2 = 0;}else if(KeyLock2==0){KeyNum = 2;KeyLock2 = 1;}
}
/*******************************************************************************
* 函 数 名         :  KEY_Action()
* 函数功能         : 按键执行操作部分
*******************************************************************************/
void KEY_Action()
{switch(KeyNum){case 1:number++; KeyNum = 0; break;case 2:number--; KeyNum = 0; break;default:break;          }
}
/*******************************************************************************
* 函 数 名         :Time0Iint* 函数功能           :定时器0配置,定时器初始化函数
*******************************************************************************/
void Time0Iint()
{EA=1;TH0 = (65536-2000)/256;//定时2msTL0 = (65536-2000)%256;TMOD &= 0xFC;TMOD =  0x01;ET0 = 1;TR0 = 1;
}
/*******************************************************************************
* 函 数 名         :void InterruptT0() interrupt 1
* 函数功能         : 定时器0中断执行部分
*******************************************************************************/
void InterruptT0() interrupt 1
{TH0 = (65536-2000)/256;//定时2msTL0 = (65536-2000)%256;Light_Scan();KEY_Scan();
}
/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{    Time0Iint();while(1){  Display();KEY_Action();}
}

参考资料

1.海创电子学习https://space.bilibili.com/93630735/
2.普中单片机论坛http://prechin.net/

普中51单片机按键-数码管显示相关推荐

  1. 普中51单片机-步进电机启停、变速控制级速度显示

    实验工具: ①普中51单片机-单核-A3,某宝买的:②28BYJ-48型号步进电机:③液晶数码管. 实现功能 实验一: ①按下独立按键K1,步进电机启动: ②按下K2,实现变速(由Delay(50)变 ...

  2. 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...

  3. 基于普中51单片机开发板的温控风扇

    自学单片机也不算很久,刚好遇上了这一门的课程设计,查找了好多的资料发现都不算合适,合适的又要收费,那么最后呢才找到了一个有关我使用的开发板的温控风扇程序,也就是普中单片机开发板,该程序来自--黑51论 ...

  4. 51单片机实现数码管显示小数

    51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...

  5. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  6. 普中51单片机学习日记-点亮LED

    普中51单片机中LED小灯所用端口为P2端口,从P2^0到P2^7分别为从左到右八个小灯. 可以使用sbit关键字定义变量led,以此简化端口的输入,并且使程序的可读性增强. 当变量的值设置为0,即端 ...

  7. 工业顺序控制--基于普中51单片机模拟

    1.实验目的 掌握工业顺序控制的硬件设计.软件设计.软件编程和调试. 2.实验内容 利用单片机实验箱实现注塑机的顺序控制. 3.实验要求 单片机P1口控制注塑机的6道工序,利用6只发光管的亮与否来模拟 ...

  8. 学习历程--普中51单片机A2--直流电机实验

    今天学习了普中的直流电机实验部分,将自己的一些学习内容记录一下. 直流电机的官方定义:直流电机(direct current machine)是指能将直流电能转换成机械能(直流电动机)或将机械能转换成 ...

  9. 51单片机控制数码管显示

    前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...

最新文章

  1. [转载]明天的数字营销分析工具2
  2. 吃万里路 |甜品店大盘点
  3. 如何设置mysql的权限_mysql 权限控制
  4. 计算机网络【六】网络层协议
  5. 设计模式之组合模式(Composite)
  6. jquery绑定的事件对ajax刷新出的数据不生效,on可能受jquery版本影响
  7. ❤️一分钟学会MySQL数据库的使用❤️
  8. 原力值13872,不知道排名多少
  9. matlab变道超车_你们对新能源汽车怎么看?
  10. Java中关于数组的初始化方式
  11. matlab from workplace,关于使用From workspace的问题
  12. 三星Q90 全景声回音壁 参数发布
  13. 爱奇艺奇遇Dream正式发布:仅售1999,国民级VR来了
  14. 距离李现生日还有3天 与荣耀30一起解锁生日专属礼包
  15. 如何清除搜狗输入法自带的“搜狐新闻”?
  16. Android微信动态调试,Android远程调试的探索与实现
  17. Java编写简易计算器
  18. java指定日期的季度以及季度第一天和最后一天(季度统计报表)
  19. python利用STMP发送gmail、QQ邮件错误及笔记总结
  20. I2C接口读取MPU9250磁力数值

热门文章

  1. 家长会PPT,老师必备
  2. 定位测绘领域中全站仪/接收机RTK精度1cm+1ppm的含义
  3. Yolov3(Mxnet)测试加速:GPU图像预处理
  4. 关于Chrome浏览器总提示未安装flash player解决办法
  5. 不拧巴,空气里弥漫着自由
  6. 国泰君安国际领投激光雷达制造商Innovusion B+轮融资
  7. 浅析手机定位---GPS、基站、AGPS、WIFI
  8. 传说中的程序员十层楼
  9. 海姆立克急救法怎么做?最全必学急救知识看这里,关键时刻救你命!
  10. 实现一个京东自动签到的python脚本