📄 cpld.c
字号:
#define _cpld_
#include "..\Inc\includes.h"
/*********************************************************************************************************
* 函数名称:ctrl
*
* 功能描述:串->并,控制开关量输出
*
* 说明:
*
********************************************************************************************************/
void ctrl(unsigned int data_595)
{
unsigned int i;
for(i=0; i<16; i++)
{
if ((data_595&0x8000)==0x8000)
{SETSER}
else
{CLRSER}
CLRSCK
SETSCK
CLRSCK
data_595 <<= 1;
}
CLRRCK
SETRCK
CLRRCK
}
/*********************************************************************************************************
* 函数名称:input
*
* 功能描述:并->串,读开关量输入
*
* 说明:
*
********************************************************************************************************/
unsigned long input(void)
{
unsigned char i,m;
unsigned long k=0;
input_load0
key_delay();
input_load1
for (i=0;i<20;i++)
{
P4DIR = P4DIR & 0xfb; // 输入
m = P4IN;
if(m&0x04)
{
k = k | 0x01;
}
else
{
k = k & 0xfffffffe;
}
input_clk0
if(i!=19) k = k << 1;
input_clk1
}
return k;
}
/*********************************************************************************************************
* 函数名称:KeyScan
*
* 功能描述:按键扫描,返回按键键值,无按键时返回值为0xFF
*
* 说明:
*
********************************************************************************************************/
unsigned char KeyScan(void)
{
unsigned char const KeyDM[17]={0xFF,0,11,13,13,6,7,8,9,5,10,12,12,1,2,3,4};
unsigned long temp;
unsigned char key=0,i;
unsigned int key_ctrl = 0x0800;
for(i=0;i<4;i++)
{
ctrl(key_ctrl|OutStates);
key_delay();
key_delay();
temp=input();
if(temp&0x10000) key=i+13;
if(temp&0x20000) key=i+9;
if(temp&0x40000) key=i+5;
if(temp&0x80000) key=i+1;
key_ctrl = key_ctrl>>1;
}
return KeyDM[key];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -