普中51单片机按键-数码管显示
基于普中单片机按键-数码管显示
简介
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单片机按键-数码管显示相关推荐
- 普中51单片机-步进电机启停、变速控制级速度显示
实验工具: ①普中51单片机-单核-A3,某宝买的:②28BYJ-48型号步进电机:③液晶数码管. 实现功能 实验一: ①按下独立按键K1,步进电机启动: ②按下K2,实现变速(由Delay(50)变 ...
- 51单片机七段数码管显示时钟无按键控制—①—74HC595版
参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...
- 基于普中51单片机开发板的温控风扇
自学单片机也不算很久,刚好遇上了这一门的课程设计,查找了好多的资料发现都不算合适,合适的又要收费,那么最后呢才找到了一个有关我使用的开发板的温控风扇程序,也就是普中单片机开发板,该程序来自--黑51论 ...
- 51单片机实现数码管显示小数
51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...
- 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真
51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...
- 普中51单片机学习日记-点亮LED
普中51单片机中LED小灯所用端口为P2端口,从P2^0到P2^7分别为从左到右八个小灯. 可以使用sbit关键字定义变量led,以此简化端口的输入,并且使程序的可读性增强. 当变量的值设置为0,即端 ...
- 工业顺序控制--基于普中51单片机模拟
1.实验目的 掌握工业顺序控制的硬件设计.软件设计.软件编程和调试. 2.实验内容 利用单片机实验箱实现注塑机的顺序控制. 3.实验要求 单片机P1口控制注塑机的6道工序,利用6只发光管的亮与否来模拟 ...
- 学习历程--普中51单片机A2--直流电机实验
今天学习了普中的直流电机实验部分,将自己的一些学习内容记录一下. 直流电机的官方定义:直流电机(direct current machine)是指能将直流电能转换成机械能(直流电动机)或将机械能转换成 ...
- 51单片机控制数码管显示
前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...
最新文章
- [转载]明天的数字营销分析工具2
- 吃万里路 |甜品店大盘点
- 如何设置mysql的权限_mysql 权限控制
- 计算机网络【六】网络层协议
- 设计模式之组合模式(Composite)
- jquery绑定的事件对ajax刷新出的数据不生效,on可能受jquery版本影响
- ❤️一分钟学会MySQL数据库的使用❤️
- 原力值13872,不知道排名多少
- matlab变道超车_你们对新能源汽车怎么看?
- Java中关于数组的初始化方式
- matlab from workplace,关于使用From workspace的问题
- 三星Q90 全景声回音壁 参数发布
- 爱奇艺奇遇Dream正式发布:仅售1999,国民级VR来了
- 距离李现生日还有3天 与荣耀30一起解锁生日专属礼包
- 如何清除搜狗输入法自带的“搜狐新闻”?
- Android微信动态调试,Android远程调试的探索与实现
- Java编写简易计算器
- java指定日期的季度以及季度第一天和最后一天(季度统计报表)
- python利用STMP发送gmail、QQ邮件错误及笔记总结
- I2C接口读取MPU9250磁力数值