📄 mouse.h
字号:
/*******************************************************
名称: 取数模块
功能: 依次从数组中取出要显示的数据
参数: 无
返回值:unsigned char setdata 要显示的数据
*******************************************************/
unsigned char LeftSet(void)
{
unsigned char setdata;
if(ptr_send<=7)
{
setdata=send_data[ptr_send];
ptr_send++;
}
else
{
setdata=send_data[0];
ptr_send=0x01;
}
return setdata; //返回取得的数据
}
/*******************************************************
名称: 扫描控制模块
功能: 控制扫描的列
参数: 无
返回值:unsigned char setbit 当前扫描的列
*******************************************************/
unsigned char RowScan(void)
{
unsigned char setbit;
if(ptr_con1<=7)
{
setbit=Row_Control[ptr_con1];
ptr_con1++;
}
else
{
setbit=Row_Control[0];
ptr_con1=0x01;
}
return setbit; //返回扫描的列
}
/*******************************************************
名称: 移动控制模块
功能: 在点阵显示模块上移动显示数据
参数: 无
返回值:unsigned char mode 模块模式
0---左移 1---右移
2---上移 3---下移
unsigned char step 移动距离
*******************************************************/
void Move(unsigned char mode,unsigned char step)
{
unsigned char i,j;
unsigned char temp[8];
for(i=0;i<=7;i++) //将要移动的数据放入移动缓冲区
send_data[i]=move_data[i];
switch(mode)
{
case 0: //左移
j=0;
for(i=0;i<=7;i++) //保存显示数据
temp[i]=send_data[i];
for(i=0;i<=7-step;i++) //左移step位
send_data[i]=send_data[i+step];
for(i=8-step;i<=7;i++) //将移出的数据存回
send_data[i]=temp[j++];
break;
case 1: //右移
j=8-step;
for(i=0;i<=7;i++)
temp[i]=send_data[i];
for(i=7;i>=step;i--)
send_data[i]=send_data[i-step];
for(i=0;i<step;i++)
send_data[i]=temp[j++];
break;
case 2: //上移
for(i=0;i<7;i++) //将每列数据循环移动step位
send_data[i]=_cror_(send_data[i],step);
break;
case 3:
for(i=0;i<7;i++) //下移
send_data[i]=_crol_(send_data[i],step);
break;
default:
break;
}
for(i=0;i<=7;i++) //将移动后的数据放入移动数据缓冲区
move_data[i]=send_data[i];
}
/*******************************************************
名称: 数据处理模块
功能: 处理接收到的数据
参数: 无
返回值:无
*******************************************************/
void ProcessData()
{
unsigned char temp;
BitData=Data_Buf[1];
button_L=B_dat0;
button_R=B_dat1;
button_M=B_dat2;
flag_X=B_dat4;
flag_Y=B_dat5;
length_X=Data_Buf[2];
length_Y=Data_Buf[0];
if(button_L+button_R+button_M==0) //没有键被按下
{
// ChoiceData(move_data);
if(Data_Buf[0]+Data_Buf[2]!=0) //如果位移不为0
{
if(flag_X) //左移
{
temp=256-length_X; //取位移绝对值
X_Rmove+=temp/4; //每4个单位为1毫米,取位移毫米
if(X_Rmove>30)
{
P0=table[8]|position[0];
Delay(10);
}
}
else if(!flag_X) //右移
{
X_Lmove+=length_X/4; //每4个单位为1毫米,取位移毫米
if(X_Lmove>30)
{
P0=table[8]|position[3];
Delay(10);
}
/*if(flag_Y)
{
temp=256-length_Y;
Y_Dmove+=temp/4;
}
else
{
Y_Umove+=length_Y/4;
}*/
}
if(flag_Y) //上移
{
temp=256-length_Y; //取位移绝对值
Y_Dmove+=temp/4; //每4个单位为1毫米,取位移毫米
if(Y_Dmove>30)
{
P0=table[8]|position[1];
Delay(10);
}
}
else //下移
{
Y_Umove+=length_Y/4;
if(Y_Umove>30)
{
P0=table[8]|position[2];
Delay(10);
}
}
Data_Buf[0]=0; //清空位移
Data_Buf[2]=0;
}
}
else //有键被按下
{
if(button_L+button_M+button_R==1)
{
if(button_L==1)
{
P1_7=0;
Delay(100);
P1_7=1;
}
// ChoiceData(char_L); //左键被按下
else if(button_R==1)
{
P1_0=0;
Delay(100);
P1_0=1;
}
// ChoiceData(char_R); //右键被按下
else
{
P1_3=0;
Delay(100);
P1_3=1;
}
// ChoiceData(char_M); //中键被按下
}
else
{
P1=0x00;
Delay(100);
P1=0xff;
}
// ChoiceData(char_S); //多个键被按下
}
}
/*******************************************************
名称: 定时器中断服务模块
功能: 显示图形
参数: 无
返回值:无
*******************************************************/
void TimerOver(void) interrupt 1
{
DisplayData(RowScan(),LeftSet()); //显示点阵图形
if(X_Lmove>=1) //如果鼠标左移大于等于1毫米
{
Move(1,1); //左移一个单位
X_Lmove=0; //清除左移长度
}
if(X_Rmove>=1) //如果鼠标右移大于等于1毫米
{
Move(0,1);
X_Rmove=0;
}
if(Y_Umove>=1) //如果鼠标上移大于等于1毫米
{
Move(2,1);
Y_Umove=0;
}
if(Y_Dmove>=3) //如果鼠标下移大于等于1毫米
{
Move(3,1);
Y_Dmove=0;
}
TL0=0x78; //重置定时器初值0xFCB0
TH0=0xEC;
}
/*******************************************************
名称: 主函数
功能: 应用程序入口
参数: 无
返回值:无
*******************************************************/
void main()
{
Init_device(); //调用初始化模块
Send_data(0xF4); //使能鼠标,允许鼠标发送数据
do{
}while(Temp_Buffer!=0xFA);
//ChoiceData(char_P); //显示鼠标点
while(1)
{
P1_2=0;
ProcessData(); //调用数据处理模块
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -