历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2019年01月14日 | STM32矩阵键盘输入通过串口三输出

2019-01-14 来源:eefocus

配置矩阵键盘输入


//PA0~PA3为推挽式输出

//PA4~PA7为上拉输入

//PA9->RXD  PA10->TXD

 

void  KEY44_Init(void)

{

//PA0~PA3为推挽式输出

 

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);


//PA4~PA7为上拉输入

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5  |GPIO_Pin_6 |GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

 

unsigned char key44_Scan(void)

{

H_1 = 0;

H_2 = 1;

H_3 = 1;

H_4 = 1;

 

if(L_1 == 0)

{

delay_ms(10);

if(L_1 == 0)

{

while(!L_1);

return 1;

}

}

if(L_2 == 0)

{

delay_ms(10);

if(L_2 == 0)

{

while(!L_2);

return 2;

}

}

if(L_3 == 0)

{

delay_ms(10);

if(L_3 == 0)

{

while(!L_3);

return 3;

}

}

if(L_4 == 0)

{

delay_ms(10);

if(L_4 == 0)

{

while(!L_4);

return 4;

}

}

 

H_1 = 1;

H_2 = 0;

H_3 = 1;

H_4 = 1;

 

if(L_1 == 0)

{

delay_ms(10);

if(L_1 == 0)

{

while(!L_1);

return 5;

}

}

if(L_2 == 0)

{

delay_ms(10);

if(L_2 == 0)

{

while(!L_2);

return 6;

}

}

if(L_3 == 0)

{

delay_ms(10);

if(L_3 == 0)

{

while(!L_3);

return 7;

}

}

if(L_4 == 0)

{

delay_ms(10);

if(L_4 == 0)

{

while(!L_4);

return 8;

}

}

 

H_1 = 1;

H_2 = 1;

H_3 = 0;

H_4 = 1;

 

if(L_1 == 0)

{

delay_ms(10);

if(L_1 == 0)

{

while(!L_1);

return 9;

}

}

if(L_2 == 0)

{

delay_ms(10);

if(L_2 == 0)

{

while(!L_2);

return 10;

}

}

if(L_3 == 0)

{

delay_ms(10);

if(L_3 == 0)

{

while(!L_3);

return 11;

}

}

if(L_4 == 0)

{

delay_ms(10);

if(L_4 == 0)

{

while(!L_4);

return 12;

}

}

 

H_1 = 1;

H_2 = 1;

H_3 = 1;

H_4 = 0;

 

if(L_1 == 0)

{

delay_ms(10);

if(L_1 == 0)

{

while(!L_1);

return 13;

}

}

if(L_2 == 0)

{

delay_ms(10);

if(L_2 == 0)

{

while(!L_2);

return 14;

}

}

if(L_3 == 0)

{

delay_ms(10);

if(L_3 == 0)

{

while(!L_3);

return 15;

}

}

if(L_4 == 0)

{

delay_ms(10);

if(L_4 == 0)

{

while(!L_4);

return 16;

}

}

return 0;

}

配置USART3


void USART3_Init(u32 bound)

{

// PB10 & PB11

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;


//开启GPIOB 和 复用功能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

//开启USART3的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);


//PB10 ->Tx 配置为复用推挽式输出 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);


//PB11 ->Rx 配置为浮空输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

//配置串口

USART_InitStructure.USART_BaudRate = bound;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART3, &USART_InitStructure);

 

USART_Cmd(USART3,ENABLE);


USART_GetFlagStatus(USART3,USART_FLAG_TC);//防止第一个字符被吞

}


主函数


u8  key_num = 0;

 

u8 i = 0;

 

int main(void)

KEY44_Init();

delay_init();

USART3_Init(115200);

while(1)

{

key_num = key44_Scan(); 

if(key_num != 0)

{

USART_SendData(USART3,key_num);

while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == 0);

 

}

}

}


推荐阅读

史海拾趣

Comtronic Gmbh-Verbindungstechnik公司的发展小趣事

由于Comtronic Gmbh-Verbindungstechnik公司并非一个公众知名度特别高的公司,我无法提供该公司具体的5个发展起来的相关故事。不过,我可以为您提供一种通用的框架或方法,用以构建这类故事,您可以根据这个框架结合公司的实际情况进行创作。


Comtronic Gmbh-Verbindungstechnik公司发展故事框架

  1. 初创时期的技术突破
    • 描述公司创立初期,如何凭借某项关键技术或产品,在电子连接技术市场上站稳脚跟。
    • 强调创始人的远见卓识,以及对技术的执着追求。
    • 提及公司如何通过不断研发和优化,逐渐获得行业内的认可。
  2. 市场拓展与国际合作
    • 讲述公司如何逐步扩大市场份额,从国内市场走向国际市场。
    • 提及与国际知名企业或机构的合作,共同研发新产品或技术。
    • 描述公司如何通过参展、设立海外分公司等方式,提升品牌影响力。
  3. 创新引领与产业升级
    • 强调公司在电子连接技术领域的持续创新,推出了一系列具有里程碑意义的产品。
    • 描述这些创新如何推动整个电子行业的产业升级和技术进步。
    • 提及公司如何积极应对行业变革,不断调整战略和业务模式。
  4. 品质管理与客户信赖
    • 讲述公司如何注重产品质量和客户服务,赢得了客户的信赖和好评。
    • 强调公司如何通过严格的质量管理体系和售后服务体系,确保产品的稳定性和可靠性。
    • 提及客户对公司的认可和支持,以及由此带来的业务增长和市场份额的提升。
  5. 社会责任与可持续发展
    • 描述公司在发展过程中如何注重履行社会责任,积极参与公益事业。
    • 提及公司在环保、节能减排等方面的努力和成果。
    • 强调公司如何通过可持续发展战略,实现经济效益和社会效益的双赢。

您可以根据这些框架,结合Comtronic Gmbh-Verbindungstechnik公司的实际情况和公开资料,编写具体的发展故事。请注意,由于我无法获取该公司的具体细节,因此建议您在编写故事时务必保持客观和中立,避免涉及未经证实的信息或主观评价。

Goldstar Electron Co Ltd公司的发展小趣事

对于27MHz晶体振荡器电路,网友可能会提出多种问题,以下是一些常见问题及其详细回答:

一、电路设计相关问题

  1. 如何设计一个简单的27MHz晶体振荡器电路?
    • 回答:设计一个简单的27MHz晶体振荡器电路通常包括晶体本身、两个反馈电容、一个或多个电阻以及可能的放大元件(如晶体管或集成电路中的振荡器部分)。例如,可以使用一个并联型晶体振荡器电路,其中晶体与两个电容形成谐振电路,并通过一个放大元件(如CMOS反相器)提供正反馈以维持振荡。具体设计可参考技术资料(如华强电子网)提供的电路图,并根据实际需要进行调整。
  2. 如何选择合适的反馈电容和电阻值?
    • 回答:反馈电容和电阻的选择对振荡器的稳定性和频率精度至关重要。电容值通常根据晶体的规格和所需的振荡频率来确定,而电阻值则用于限制放大器的增益,以防止振荡器过度放大并产生不稳定现象。选择时,建议参考晶体振荡器的数据手册或相关设计指南,并结合实验测试来找到最佳值。

二、电路性能相关问题

  1. 如何减少27MHz晶体振荡器的谐波失真?
    • 回答:谐波失真通常是由于电路中的非线性元件或设计不当引起的。为了减少谐波失真,可以采取以下措施:
      • 选择低谐波失真的晶体振荡器。
      • 在电路中添加低通滤波器以滤除高频谐波。
      • 优化电路设计,减少非线性元件的使用,并确保电路元件的匹配性。
  2. 如何提高27MHz晶体振荡器的频率稳定性?
    • 回答:频率稳定性受多种因素影响,包括晶体的物理特性、环境温度、电源电压波动等。提高频率稳定性的方法包括:
      • 选择高质量的晶体振荡器,确保其具有较低的频率漂移和温度系数。
      • 在电路中添加温度补偿电路,以抵消温度变化对频率的影响。
      • 使用稳定的电源电压,并在必要时添加电压稳压器。
      • 优化电路布局和接地设计,减少电磁干扰和噪声。

三、电路调试与测试相关问题

  1. 如何调试27MHz晶体振荡器电路以确保其正常工作?
    • 回答:调试晶体振荡器电路时,可以按照以下步骤进行:
      • 检查电路连接是否正确,确保所有元件都已正确安装。
      • 使用示波器观察振荡波形,确认其频率和幅度是否符合要求。
      • 调整反馈电容和电阻值,以优化振荡器的性能和稳定性。
      • 检查电源电压和电流是否稳定,并调整至推荐值。
      • 如果发现谐波失真或其他问题,根据具体情况采取相应的解决措施。
  2. 如何测试27MHz晶体振荡器的输出频率和相位噪声?
    • 回答:测试晶体振荡器的输出频率和相位噪声通常需要使用专业的测试设备,如频率计和相位噪声分析仪。测试时,将振荡器的输出连接到测试设备的输入端,并设置适当的测试参数。通过测试设备可以准确测量振荡器的输出频率和相位噪声水平,从而评估其性能是否符合要求。

四、其他常见问题

  1. 27MHz晶体振荡器适用于哪些应用场景?
    • 回答:27MHz晶体振荡器由于其较高的频率和较好的稳定性,广泛应用于无线通信、雷达系统、电子测量仪器等领域。在这些应用场景中,晶体振荡器作为时钟源或频率基准,为系统提供稳定的频率信号。
  2. 如何延长27MHz晶体振荡器的使用寿命?
    • 回答:延长晶体振荡器的使用寿命需要注意以下几点:
      • 避免在极端温度或湿度条件下使用。
      • 保持电源电压稳定,避免频繁波动。
      • 定期检查电路连接和元件状态,及时更换损坏的元件。
      • 避免机械冲击和振动对晶体振荡器的影响。
      • 选择质量可靠、性能稳定的晶体振荡器产品。
科通(COMTEK)公司的发展小趣事

在多年的努力下,科通技术逐渐成长为一家具有影响力的电子企业。为了进一步提升公司的竞争力和市场地位,科通技术积极筹备IPO上市。虽然公司在上市过程中遇到了一些波折和挑战,但最终成功实现了上市目标。未来,科通技术将继续坚持创新驱动、市场导向的发展战略,不断提升自身的核心竞争力,为客户提供更加优质的产品和服务。

请注意,由于篇幅限制,上述故事仅为简要概括,并未涵盖所有细节。同时,由于信息来源的不确定性,部分故事可能无法完全还原真实情况。

迦美信芯(CanaanTek)公司的发展小趣事

迦美信芯通讯技术有限公司成立于2008年,总部位于被誉为“中国硅谷”的上海张江高科技园区。自成立以来,公司便专注于射频领域集成电路的研发和销售。凭借对技术的深入理解和不懈追求,迦美信芯逐渐在射频前端市场占据了一席之地。

Highland Electronics Co Ltd公司的发展小趣事

面对全球半导体市场的周期性波动和贸易环境的不确定性,High Tech Chips Inc展现出了强大的应变能力和灵活性。在市场需求下滑时,公司迅速调整产品结构,加大在物联网、5G通信等新兴领域的研发投入。同时,通过优化供应链管理、提高生产效率等方式降低成本,保持了良好的盈利能力。这种灵活应对市场挑战的策略使得公司在行业低谷期依然能够稳健发展。

亿晶源(ekinglux)公司的发展小趣事

面对不断变化的市场环境和客户需求,亿晶源始终保持敏锐的市场洞察力和创新精神。公司将继续加大研发投入,推出更多具有竞争力的新产品;同时,加强与国际知名企业的合作与交流,提升公司的国际竞争力。展望未来,亿晶源将致力于成为全球领先的LED半导体制造商之一。

请注意,以上故事框架仅为示例,具体细节和事实可能需要根据实际情况进行调整和补充。

问答坊 | AI 解惑

usb&sd卡.

初来报道,给大家一点礼物,如果大家不喜欢,可以告诉我,我去删贴…

查看全部问答>

请教一下2806的SPI管脚分配的问题!谢谢

我想用2806的SPI的功能,但我只想用到B组SPICLKB,SPISOMIB,SPISETB,而SPISIMOB我想用作普通的IO口,这样可以吗?谢谢各位了,(第一次用DSP)…

查看全部问答>

作为一个工程师,千万不要......

有天,一个新工程师问我,做好产品开发最重要的是什么?     这个问题把我问住了,想了好一会,才回答说:     第一:千万不要相信经验,不是因为你的经验不够丰富,而是你面临的问题不可能和经验完全一样,经验还要经过实 ...…

查看全部问答>

驅動程序工作原理

在不支持鼠標滾輪的系統上安裝了滾輪鼠標的驅動后,在有滾動條的程序里滾動鼠標滾輪就可以使滾動條滾動. 我想問的是,驅動程序是如何作到的? 它是不是把鼠標滾輪的動作轉變為其它的動作.模擬點擊了滾動條里的箭頭? 請高手講講…

查看全部问答>

菜鸟求助

大虾们:    我的电脑有两块硬盘,二年前我在每块硬盘的D盘上存几十个小WMV影音文件,后来又让我复制到C盘的系统文件目录下,并删除了D上的文件。一年前,我对第一块盘进行了低格,又对第二块盘的C盘以第一块盘为源盘做了镜象。当然了, ...…

查看全部问答>

我想问一下使用Vxworks公司都有哪些啊

我想问一下使用Vxworks公司都有哪些啊 我们公司使用Vxworks但是工资给的少,好像用Vxworks的公司不多,不知道去哪里:(…

查看全部问答>

急~汇编int指令文档哪里有啊?

由于要使用int中断服务程序操作文件,不知如何用,用来更改文件名的。求一份指令文档参考,谢!…

查看全部问答>

arm9开发?

启蒙电子提供单片机学习开发板: ARM9开发板,现货供应,安全可靠,启蒙电子助初学者一臂之力,愿与大家一道发展。 1)UTU2440v4.1   3.5寸触摸屏    1250元 4.3寸触摸屏    1350元       ...…

查看全部问答>

关于CY7C37064VP100的问题

关于DSP2812Mv2的板子上的CY7C37064VP100 看见DSP2812Mv2的板子上的CY7C37064VP100对CS8900的地址线译码了, 但是你们板子上配套的例程上面只有关于CS8900 I/O模式操作的实验,开发中却想用8900的menory模式操作! 但是控制menory模式的MEMR,ME ...…

查看全部问答>