📄 keyboard_led.c
字号:
/*******************************************************************/
#include "exp1_2407.h"
/*******************************************************************/
/*****************************************************
//* PFDATDIR&=0xFFEF; //7279clk低
//* PFDATDIR&=0xFFF7; //7279cs低
//* PFDATDIR&=0xFFFB; //7279data低
//* PFDATDIR&=0xFFDF; //7279发数据
*******************************************************
//* PFDATDIR|=0x0010; //7279clk高
//* PFDATDIR|=0x0008; //7279cs高
//* PFDATDIR|=0x0004; //7279data高
//* PFDATDIR|0=x0020; //7279收数据
******************************************************/
unsigned int p;
char send_buff=0x00;
char rece_buff=0x00;
unsigned int data_buff=0x0000;
void sysini() //系统初始化子程序
{
asm(" setc INTM"); //禁止所有中断
asm(" setc SXM"); //抑制符号位扩展
asm(" clrc OVM"); //累加器中结果正常溢出
* WDCR=0x00E8; //禁止看门狗
* SCSR1=0x0009; //CLKIN=7.3728M,CLKOUT=29.4912M,使能EVB模块
* PFDATDIR=0x3C2C; //将iopf2、3、4、5配置为输出脚,且iopf2、3、5初始值为1,iopf4初始值为0
}
void pdpintb_ini() //pdpinta中断初始化子程序
{
* EVBIFRA=0xFFFF; //清除PDPINTA中断标志
* IFR=0xFFFF; //清除所有中断标志
* EVBIMRA=0x0001; //使能PDPINTA中断
* IMR=0x0001; //使能中断1
asm(" clrc INTM"); //开总中断
}
void delay_8us()
{
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
}
void delay_50us()
{
unsigned int j;
for(j=0;j<18;j++);
}
void delay_25ms()
{
unsigned int k;
for(k=0;k<9500;k++);
}
void delay_long()
{
unsigned int n;
for(n=0;n<60000;n++);
for(n=0;n<60000;n++);
}
void cs_high()
{
* PFDATDIR=* PFDATDIR|0x0008; //7279cs高
}
void cs_low()
{
* PFDATDIR=* PFDATDIR&0xFFF7; //7279cs低
}
void send()
{
unsigned int m;
cs_low();
delay_50us(); //延时50us;
for(m=0;m<8;m++)
{
switch(send_buff&0x80)
{
case 0x00:* PFDATDIR=* PFDATDIR&0xFFFB;break; //7279data低
case 0x80:* PFDATDIR=* PFDATDIR|0x0004; //7279data高
}
* PFDATDIR=* PFDATDIR|0x0010; //7279clk高
delay_8us();
* PFDATDIR=* PFDATDIR&0xFFEF; //7279clk低
delay_8us();
send_buff<<=1;
}
}
void receive()
{
unsigned int s;
* PFDATDIR=* PFDATDIR&0xFBDF; //将iopf2配置为输入脚,7279发数据
delay_50us();
for(s=0;s<8;s++)
{
* PFDATDIR=* PFDATDIR|0x0010; //7279clk高
delay_8us();
data_buff=data_buff|((* PFDATDIR&0x0004)<<(13-s));//读iopf2引脚数据;
* PFDATDIR=* PFDATDIR&0xFFEF; //7279clk低
delay_8us();
}
rece_buff=data_buff>>8;
data_buff=0x0000; //清除data_buff
* PFDATDIR=* PFDATDIR|0x0420; //将iopf2配置为输出脚,7279收数据
}
interrupt void pdpintb()
{
send_buff=0x15; //读键值指令
send();
receive();
send_buff=0xA1; //数据左移指令
send();
send_buff=0xC8;
send();
send_buff=rece_buff;//将接收到的键值送显示
send();
* IFR=0xFFFF; //清除所有中断标志
* EVBIFRA=0xFFFF; //清除PDPINTB中断标志
asm(" clrc INTM"); //开总中断
}
interrupt void nothing() //哑中断子程序
{
asm(" clrc INTM"); //开总中断
}
void main()
{
sysini();
pdpintb_ini();
delay_25ms();
send_buff=0xBF; //测灯指令
send();
delay_long();
delay_long();
send_buff=0xA4; //清除指令
send();
for(p=0;p<16;p++) //送出数据0x00~0x0F
{
send_buff=0xC8;
send();
send_buff=p;
send();
delay_long();
send_buff=0xA1; //数据左移指令
send();
}
send_buff=0xA4; //清除指令
send();
//cs_high();
for(;;);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -