下面是数码管部分电路原理图:
下面是矩阵键盘部分的电路原理图:
c51单片机程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar seg[4]={0xfe,0xfd,0xfb,0xf7};
uchar shu;
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j
for(x=0;x<=148;x++);
}
void keyboard()
{
uchar x,y,i;
for(y=0;y<4;y++)
{
P1=seg[y];
if((P1&0xf0)!=0xf0)
{
Delay_1ms(5);
if((P1&0xf0)!=0xf0)
{
x=P1&0XF0;
x=(x>>4)|0xf0;
for(i=0;i<4;i++)
{
if(x==seg[i])
{
x=i;
shu=4*y+x+1;
}
}
}
}
}
}
void segdisplay(uchar i)
{
P0 = 0; //消隐
P2 = 6; //第7位数码管显示
P0 = table[(i / 10)%10]; //在这里取 i 的十位数
Delay_1ms(5); //延时0.5秒后显示下一个数
P0 = 0; //消隐
P2 = 7; //第8位数码管显示
P0 = table[i % 10]; //在这里取 i 的个位数
Delay_1ms(5);
P0=0;
}
void main()
{
shu = 0;
while(1)
{
keyboard();
segdisplay(shu);
}
}
关键字:51单片机 矩阵按键
引用地址:51单片机矩阵按键电路图+程序
推荐阅读最新更新时间:2024-03-16 13:50
51单片机——外部中断
一、外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了。(传送门:51单片机入门教程(5)——定时器中断) 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。 51单片机的中断源优先级与向量号如下表: 1.2 外部中断 除了定时器中断外,51单片机还有两个外部中断源——外部中断0、外部中断1。分别由单片机的12号引脚(INT0/P3.2)、13号(INT1/P3.3)引脚的低电平/负跳变触发。 和定时器中断一样,要使用这两个外部中断,首先要进行初始化操作,即写入相关的寄存器。初始化外部中断需要写入下面两
[单片机]
8051单片机教程第二十二课:串行口应用编程实例
1.串口方式0应用编程8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就可以扩展一个并行口。 例:用8051串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,可以靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通讯之前,都要先对控制寄存
[单片机]
51单片机数码管动态时钟电路图
首先准备材料吧:SEG数码管4个共阴极(小编用的共阳极的)、10k排阻(小编没有直接做了个)、51单片机、按钮、30p电容、12MHz晶振、10k电阻、10uf电容、插针、74ls245(小编用三极管代替了)。 成品图 原理图 主程序: #include Key.h #include led.h uchar timeSetBuff ={'0','0',LED_MODE_COUNT,'0','0',LED_MODE_COUNT,'0','0'};//时钟数据缓冲区 uchar alarmSetBuff ={'0'
[单片机]
基于51单片机的数字音乐盒C语言驱动程序
SPK EQU P3.7 ; 蜂鸣器所在端口 COUNT50 EQU 39H SEC EQU R0 MIN EQU R1 SEG EQU P2 NUM EQU P0 SEG7 EQU 30H SEG6 EQU 31H SEG5 EQU 32H SEG4 EQU 33H SEG3 EQU 36H SEG1
[单片机]
51单片机开发板的主要功能 51单片机开发板能做什么
51单片机开发板是一种基于8051系列单片机芯片的开发板,具有丰富的功能和广泛的应用。下面将详细介绍51单片机开发板的主要功能以及能够实现的各种应用。 一、基本功能: 通用输入输出:51单片机开发板具有多个通用输入输出引脚,可以连接各种外部设备和传感器,实现数据的输入和输出。 时钟管理:开发板通常会集成时钟电路,包括晶振、时钟发生器等,可以提供稳定的时钟信号给单片机使用。 存储器管理:开发板通常会搭载闪存、EEPROM、SRAM等各种类型的存储器,用于存储程序代码和数据。 电源管理:开发板通常会提供多种电源供电方式,可以选择外部电源或者USB供电。 通信接口:如串口、SPI、I2C等,可以连接各种外部设备进行数据通信
[单片机]
串口通信详解(51单片机)
计算机串行通信基础 随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 串行通信的基本概念 异步通信 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”
[单片机]
C51单片机指针实例
#pragma src #include reg51.H f(){} f1(){} f2(){} main() { { int x; int *px; //下面这些表示虽然很烦,但是生成的代码却及其简洁: //将 xdata 型指针 0x4000 赋给 px px=(int xdata *)0x4000; //表示从 xdata 0x4000处取一个 char 给x x=*((char xdata *)0x4000); // 表示从 code 0x4000处取一个 word 作为 xdata 型的指针 给 px px=*((int xdata * xdata *)0x4000); //表示从 code 0x4000处取一个 wor
[单片机]
基于AT89C51单片机的微型PLC详解
可编程控制器PC(Programmable Controller),为与个人计算机PC(Personal Computer)相区别,可简称为PLC。它是按照成熟而有效的继电控制概念和设计思想,用先进的单片机技术来实现I/O的实时检测和控制,可靠性高,编程简单、易学,因此,得到广泛应用。 将PLC技术引进电工学、电力拖动课程,是课程建设现代化的重要措施。在教学经费相对紧张的情况下,我们自己动手,以AT89C51单片机为核心,设计并研制了LD型微型PLC,应用于继电控制实验,取得了良好的效果。 用单片机构成的PLC,实际上就是一个单片机测控系统。用这样一个程序控制的计算机系统去执行继电控制的梯形图程序,由于继电控制梯形图中各被
[单片机]