|
zlg7289应用电路图:
zlg7289资料:
zlg7289矩阵键盘的应用:
源程序:
- /*该程序实现的功能是在小键盘按键,在LED上显示所按的键的数值*/
- #include <stdio.h>
- #include "hardware.h"
- #include "zlg7289.h"
- #define SDIO_CTRLIO 0X4 //PF2
- #define SDIOOUT() (PDATF&=(~SDIO_CTRLIO));
- #define SDIOIN() (PDATF|=SDIO_CTRLIO);
- unsigned char keymap[]={ 7,4,1,0,10,0,0,0,8,5,
- 2,17,11,0,0,0,9,6,3,16,
- 12,13,0,0,14,0,15,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0,0, 0,0,0,0,0,
- 0,0,0,0
- }; //键盘映射表
- void sendsiodata(unsigned char data)
- {
- I_ISPC=0x10; //中断挂起清零寄存器 清除未响应中断请求([4] INT_SIO = 1 为清除)
- SIODAT=data; //给SIO数据寄存器赋值
- SIOCON|=(0x1<<3); //SIO控制寄存器澹([3] = 1 为 SIO开始)
- while(!(INTPND&0x10)); //中断挂起寄存器([4] INT_SIO = 1 为请求)
- I_ISPC=0x10;
- }
- unsigned char readsiodata()
- {
- SDIOIN(); //端口F控制寄存器的PF2设置成Input
- sendsiodata(0);
- SDIOOUT(); //端口F控制寄存器的PF2设置成Output
- return SIODAT; //返回SIO数据寄存器的值
- }
- char getkey()
- {
- char key,mykey;
- INTMSK|=(0X1<<26);
- while(PDATG&0x10);
- ZLG7289_ENABLE();
- sendsiodata(ZLG7289_CMD_RDKEY);
- mykey=readsiodata(); //mykey的值为该键在键盘影射表中的位子
- ZLG7289_DISABLE();
- INTMSK&=(~0X1<<26);
- key=keymap[mykey]; //查表得出该键的值
- printf("mykey is %d\nreturn key is %d\n",mykey,key);
- return key;
- }
- static void Delay(int t) //延时函数
- {
- int i;
- for(;t>0;t--)
- for(i=0;i<400;i++);
- }
- int led_showdata(unsigned int a)
- {
- int i=0;
- INTMSK|=(0X1<<26);
- ZLG7289_ENABLE();
- sendsiodata(ZLG7289_CMD_RST); //发送键盘的绝对值到SIODAT
- Delay(20);
- a%=100000000; //为了避免a的值超出8 位数,如果超出8 位则将超出部分舍去
- //利用ZLG7289 将a 显示到LED上
- for(i=0;i<8 && a !=0 ;i++)
- {
- sendsiodata(ZLG7289_CMD_DATA1|i);
- sendsiodata(a%10);
- a/=10;
- Delay(10);
- }
- for(;i<8;i++)
- {
- sendsiodata(ZLG7289_CMD_DATA0|i);
- sendsiodata(0xf);
- Delay(10);
- }
- ZLG7289_DISABLE();
- INTMSK&=(~0X1<<26);
- return 0;
- }
- int main()
- {
- printf("inputEnterExit!\n");
- while( (i = getkey()) != 15) //当小键盘按到回车键时退出,其他情况则将键盘值显示到LED上
- {
- led_showdata(i);
- Delay(2000);
- }
- return 0;
- }
复制代码
所有资料下载:
zlg7289键盘加数码管驱动程序及资料.rar
(1.42 MB, 下载次数: 112)
|
|