找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 7988|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

zlg7289鍵盤和數(shù)碼管驅(qū)動(dòng)程序+應(yīng)用電路+資料下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140725 發(fā)表于 2016-10-17 21:26 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
zlg7289應(yīng)用電路圖:

zlg7289資料:


zlg7289矩陣鍵盤的應(yīng)用:



源程序:
  1. /*該程序?qū)崿F(xiàn)的功能是在小鍵盤按鍵,在LED上顯示所按的鍵的數(shù)值*/
  2. #include <stdio.h>
  3. #include "hardware.h"
  4. #include "zlg7289.h"
  5. #define SDIO_CTRLIO      0X4  //PF2
  6. #define SDIOOUT()  (PDATF&=(~SDIO_CTRLIO));
  7. #define SDIOIN()   (PDATF|=SDIO_CTRLIO);

  8. unsigned char keymap[]={  7,4,1,0,10,0,0,0,8,5,
  9. 2,17,11,0,0,0,9,6,3,16,
  10. 12,13,0,0,14,0,15,0,0,0,
  11. 0,0,0,0,0, 0,0,0,0,0,
  12.                               0,0,0,0,0, 0,0,0,0,0,
  13. 0,0,0,0,0, 0,0,0,0,0,
  14. 0,0,0,0
  15. };        //鍵盤映射表


  16. void sendsiodata(unsigned char data)
  17. {
  18. I_ISPC=0x10;         //中斷掛起清零寄存器 清除未響應(yīng)中斷請(qǐng)求([4] INT_SIO = 1 為清除)
  19. SIODAT=data;        //給SIO數(shù)據(jù)寄存器賦值
  20. SIOCON|=(0x1<<3);        //SIO控制寄存器澹([3] = 1 為 SIO開始)
  21. while(!(INTPND&0x10));        //中斷掛起寄存器([4] INT_SIO = 1 為請(qǐng)求)
  22. I_ISPC=0x10;
  23. }

  24. unsigned char readsiodata()
  25. {
  26. SDIOIN();        //端口F控制寄存器的PF2設(shè)置成Input
  27. sendsiodata(0);        
  28. SDIOOUT();        //端口F控制寄存器的PF2設(shè)置成Output
  29. return SIODAT;        //返回SIO數(shù)據(jù)寄存器的值
  30. }

  31. char getkey()
  32. {
  33. char key,mykey;
  34. INTMSK|=(0X1<<26);

  35. while(PDATG&0x10);

  36. ZLG7289_ENABLE();
  37. sendsiodata(ZLG7289_CMD_RDKEY);
  38. mykey=readsiodata();        //mykey的值為該鍵在鍵盤影射表中的位子
  39. ZLG7289_DISABLE();
  40. INTMSK&=(~0X1<<26);
  41. key=keymap[mykey];         //查表得出該鍵的值
  42. printf("mykey is %d\nreturn key is %d\n",mykey,key);
  43. return key;
  44. }

  45. static void Delay(int t)         //延時(shí)函數(shù)
  46. {
  47.         int i;
  48.         for(;t>0;t--)
  49.                 for(i=0;i<400;i++);
  50. }

  51. int led_showdata(unsigned int a)
  52. {
  53. int i=0;
  54. INTMSK|=(0X1<<26);
  55. ZLG7289_ENABLE();
  56. sendsiodata(ZLG7289_CMD_RST);         //發(fā)送鍵盤的絕對(duì)值到SIODAT
  57. Delay(20);

  58. a%=100000000;         //為了避免a的值超出8 位數(shù),如果超出8 位則將超出部分舍去
  59. //利用ZLG7289 將a 顯示到LED上
  60. for(i=0;i<8 && a !=0 ;i++)
  61. {
  62. sendsiodata(ZLG7289_CMD_DATA1|i);
  63. sendsiodata(a%10);
  64. a/=10;
  65. Delay(10);
  66. }
  67. for(;i<8;i++)
  68. {
  69. sendsiodata(ZLG7289_CMD_DATA0|i);
  70. sendsiodata(0xf);
  71. Delay(10);
  72. }

  73. ZLG7289_DISABLE();
  74. INTMSK&=(~0X1<<26);
  75. return 0;
  76. }

  77. int main()
  78. {
  79. printf("inputEnterExit!\n");
  80. while( (i = getkey()) != 15)        //當(dāng)小鍵盤按到回車鍵時(shí)退出,其他情況則將鍵盤值顯示到LED上
  81. {
  82. led_showdata(i);
  83. Delay(2000);
  84. }
  85. return 0;
  86. }
復(fù)制代碼

所有資料下載:
zlg7289鍵盤加數(shù)碼管驅(qū)動(dòng)程序及資料.rar (1.42 MB, 下載次數(shù): 112)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:64765 發(fā)表于 2019-12-5 15:51 | 只看該作者
學(xué)習(xí)了,謝謝分享。
回復(fù)

使用道具 舉報(bào)

板凳
ID:64765 發(fā)表于 2020-2-3 20:43 | 只看該作者
正好需要此資料,雪中送炭,謝了。
回復(fù)

使用道具 舉報(bào)

地板
ID:686739 發(fā)表于 2020-2-5 09:45 來(lái)自觸屏版 | 只看該作者
學(xué)習(xí)一下,謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表