📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#define KEYCOL1 (1<<7) //输出
#define KEYCOL2 (1<<8) //输出
#define KEYCOL3 (1<<9) //输出
#define KEYCOL4 (1<<10) //输出
#define KEYROW1 (1<<11) //输入
#define KEYROW2 (1<<12) //输入
#define KEYROW3 (1<<13) //输入
uint16 KEYS=0x0000;
/*********************************************************************************************************
** 键盘中断服务程序,判断键号,P0.1用作EINT0
********************************************************************************************************/
void __irq keypad_Eint0(void)
{
IO0CLR=KEYCOL1;
IO0SET=KEYCOL2|KEYCOL3|KEYCOL4;
switch((IO0PIN&0x00003800)>>11) //读KEYROW, 11-13位
{
case 6: if(KEYS!=0x01) {KEYS=0x01;break;}
else {KEYS=0;break;}
case 5: if(KEYS!=0x02) {KEYS=0x02;break;}
else {KEYS=0;break;}
case 3: if(KEYS!=0x04) {KEYS=0x04;break;}
else {KEYS=0;break;}
default: break;
}
IO0CLR=KEYCOL2;
IO0SET=KEYCOL1|KEYCOL3|KEYCOL4;
switch((IO0PIN&0x00003800)>>11) //读KEYROW, 11-13位
{
case 6: if(KEYS!=0x08) {KEYS=0x08;break;}
else {KEYS=0;break;}
case 5: if(KEYS!=0x10) {KEYS=0x10;break;}
else {KEYS=0;break;}
case 3: if(KEYS!=0x20) {KEYS=0x20;break;}
else {KEYS=0;break;}
default: break;
}
IO0CLR=KEYCOL3;
IO0SET=KEYCOL1|KEYCOL2|KEYCOL4;
switch((IO0PIN&0x00003800)>>11) //读KEYROW 11-13位
{
case 6: if(KEYS!=0x40) {KEYS=0x40;break;}
else {KEYS=0;break;}
case 5: if(KEYS!=0x80) {KEYS=0x80;break;}
else {KEYS=0;break;}
case 3: if(KEYS!=0x0100) {KEYS=0x0100;break;}
else {KEYS=0;break;}
default: break;
}
IO0CLR=KEYCOL4;
IO0SET=KEYCOL1|KEYCOL2|KEYCOL3;
switch((IO0PIN&0x00003800)>>11) //读KEYROW 11-13位
{
case 6: if(KEYS!=0x0200) {KEYS=0x0200;break;}
else {KEYS=0;break;}
default: break;
}
while((EXTINT&0x01)!=0)
{
EXTINT=0x01;
}
VICVectAddr=0; //向量中断结束
}
/*********************************************************************************************************
** 要使向量中断服务程序结束后,都从判断KEYS的语句(地址)往下走
********************************************************************************************************/
int main (void)
{
PINSEL0=0x0C; //P0.1为EINT0
PINSEL1=0x00;
IO0DIR=0x00000780|0x02; //KEYCOL为输出,P0.7-10. p0.1 输出
IO0CLR=0x00000780;
EXTMODE=0x00;
/* 打开EINT3中断(使用非向量IRQ) */
VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断
VICDefVectAddr = (int)keypad_Eint0; // 设置中断服务程序地址
EXTINT = 0x01; // 清除EINT0中断标志
VICIntEnable = 1<<14; // 使能EINT0中断,EINT3在Bit17上
while(1);
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -