找单片机键盘的C程序编写方法。 一键式多用途。 不要使用中断的。

发布于 科技 2024-08-20
17个回答
  1. 匿名用户2024-02-01

    你能说得更具体一点吗,我以前用的C51程序还没保存,现在是MSP430,你要吗?

  2. 匿名用户2024-01-31

    请添加详细说明:

    每个引脚的外围都布置好了,四个LED显示屏都连接到该端口,无论是共阴极还是共阳极连接2键盘连接到该端口。

    3.每个相应键的含义。

  3. 匿名用户2024-01-30

    它。。。。。。太乱了吧? 你能理清这整堆逻辑,我真的很佩服你。 你按住它,短按立刻生效,长按等于无。

    既然用了定时器,就不要耽搁了,那个东西只出现在教科书上,很少在实际应用中使用。 使用定时器,设置一个基准时间,如200us一个中断,然后设置一个10ms的按钮扫描时间,即50个中断,并使用两个连续的按钮扫描低电平来判断按钮的有效性,延迟可以是88,教条主义要人命。 按钮生效后,我会立即“计算中断”,对吧?

    按下加按钮,松开清除0,下次重新计数,2秒就是20000次中断,表示长按有效,不统计这个数字短按有效,这样就可以单独处理了,就这么简单,不要一直拿着计时器开机关。 理清思路,不要说长按短按,连双击都可以。

  4. 匿名用户2024-01-29

    因为初始值没有分配给中间和后面,所以它从第一毫秒到毫秒变化,相应地,关键时间也发生了变化。

  5. 匿名用户2024-01-28

    1:键值记录。

    2:时间记录。

    3:是同一个键吗?

    以上三个条件组合在一起,一个条件使用一个变量。

  6. 匿名用户2024-01-27

    每个按钮设置一个状态标志,当标志为 1 时函数是什么,当函数为 2 时函数是什么,依此类推。

  7. 匿名用户2024-01-26

    定时器可在按下第一按时启动,然后记录1s以内的按键次数,并可对各种情况进行编码,实现不同的功能。

  8. 匿名用户2024-01-25

    它是一个状态机,它在什么状态下使用什么。

    双击实际上是一种繁琐且难以调试的方法。

    使用它的简单方法是查看在什么接口(状态)中表示什么函数。

  9. 匿名用户2024-01-24

    你可以添加一个定时器来实现你说的功能,先把矩阵键盘扫描写成一个独立的函数,比如char keyread(void)(没有按键返回0,否则返回键的值),然后设置定时器到1s(根据你需要按的次数来确定时间), 主程序直接调用keycan(),当检测到返回值不为0时,启动定时器,然后进入while无限循环扫描密钥,在定时器达到1s之前,如果再次检测到该值,则将标记加到1,当定时器到达定时器时,将标记的值读入密钥处理程序中,将标记清除为零。

  10. 匿名用户2024-01-23

    检查您要按下该键的时间长度以确定该键的功能。

  11. 匿名用户2024-01-22

    网上有很多这样的例子,所以我给你一个参考。

    while(1)

    if(!key2)}}

  12. 匿名用户2024-01-21

    矩阵键盘。

    #include

    #include

    unsigned char code table = ;公阳数码管显示 0 f

    void delay() delay 子例程。

    void display(unsigned char s) 显示子例程。

    unsigned char keycan(void) keyscanner for line lines for column lines.

    while((p1&0xf0) != 0xf0);等待密钥被释放。

    return ((rcode) +ccode));返回密钥编码。

    elsercode = (rcode<<1)|0x01;线扫描代码向左移动一位}}

    return 0;如果按下时没有键,则返回值为 0

    void keydispaly(unsigned char key)

    int main(void)

    return 0;}

  13. 匿名用户2024-01-20

    uchar code act[4]=;

    char scan_key(void)}}

    if(find==0)return-1;返回值为-1,返回1为正常返回,返回-1为异常返回程序只是程序编写的标准,即没有键。

    return(ini*4+inj);i 是上四位数字的判断,j 是后四位数字的判断。

    0 1 2 3 为零 0,1,2,3 如果开关 0 打开,则 p4 为 0,即 1110 1110

    4 5 6 7 向右移动补 1,得到 1111 1110,j 为 0

    8 9 A b 开关 1 打开 p5 为 0,即 1101 1110,右移 1111 1101

    c d e f 可以判断 j 为 1,也可以推断出 1 一样。

    p4 5 6 7

    按照这个想法,4个端口只能实现4个开关4*4=16,2*2=4必须改变思维方式,如果是因为端口太紧,可以使用P3端口,或者使用分压读取AD判断按钮(AD键盘)。

  14. 匿名用户2024-01-19

    发一张键盘部分的截图,蚊子描述不容易理解。

    键盘程序与硬件链接有很大关系。

  15. 匿名用户2024-01-18

    哪些系列的MCU有P4端口?

  16. 匿名用户2024-01-17

    只有30分钟,我想找人教你。

  17. 匿名用户2024-01-16

    主要存在两个问题:

    1. “chuli”命令只能执行一次。

    原因:也就是说,程序上电复位后,执行到零循环,然后一直在这里循环,无法执行chuli;

    已解决:全部跳转到数字(例如零、一、..九)跳到楚里;确保中断后可以执行chuli;

    2、中断时扩散表指针的r1增量模式错误。

    虽然你的程序中还没有感觉到这个错误,但它是存在的,这个错误还有两点:

    一是 r1 的初始值为 0,所以无论怎么移位,r1 永远是 0;

    第二,你不应该在这里使用移位(我猜你的意图应该是从零到一、..九,否则只能执行几个跳转,如一、二、四、八等),并且应该使用 add 指令,每次加 2 个字节(好久没编程了,我忘了 ajmp+ 地址有多少字节,反正有几个字节加几个字节)。

    试试吧,应该没什么大问题!

    另外,即使这个程序修改后可以执行,也尽量不要这样写。 你的写作接近于使用操作系统的多任务编程方法,但操作系统不支持,所以看起来很奇怪,可读性很差,可以参考 Keil C51 中 Tiny OS 的原理来重写。 如果你觉得太难了,你可以使用常规方法而不是无限循环,例如:

    对于每个输出(零,一、..9)写一个子例程,在你的分散中做一个子例程调用,但记得在调用后跳出来。

    方法有很多,想想看,不要“先试查询方法,打断方式”一定要知道为什么不行,祝你好运!

相关回答
13个回答2024-08-20

这是哪个微控制器?画面太小了,不清晰,头发更大。

10个回答2024-08-20

设计要求是什么?

8个回答2024-08-20

这是一个简单的例程,即 P1 端口上 LED 灯闪烁的例程。 >>>More

6个回答2024-08-20

还行。 在 51 微控制器的嵌入式 C 语言中,还支持指针。 >>>More