📄 usr.c
字号:
#include<spce061a_chf.h>
#include"host_TX.h"
#include"bit.h"
#include "LCD_Dis.h"
#include "LCD_PortConfig.h"
#include "LCD_Config.h"
#include"LCD_Driver_User.h"
extern t_counter;
extern r_timer[18];
extern kk;
unsigned char number[3]={0};
unsigned int a_length=0;
unsigned int b_length=0;//开始时候,吊绳的长度
unsigned int *data_addr=0xf100;
unsigned int data_key=0;
unsigned char aa[]="please input the number:";
///////////////////////////////////////////
//函数:void system_init(void)
//描述:系统初始化函数
//参数:无
//返回:无
/////////////////////////////////////////////
void system_init(void)
{
*P_IOA_Dir=0x0fff;
*P_IOA_Attrib=0x0fff;
*P_IOA_Data=0x0000;
*P_IOB_Dir=0x7ff3;
*P_IOB_Attrib=0x7fff;
*P_IOB_Data=0x000c;
}
///////////////////////////////////////////
//函数:void Tx_hanshu(unsigned int temp_data);
//描述:发送函数
//参数:要发送的数据
//返回:无
/////////////////////////////////////////////
void Tx_hanshu(unsigned int temp_data)
{
unsigned int i=0;
*P_TimerA_Data = 0xff61;
*P_TimerA_Ctrl = 0x0036;//开始先关闭;设置TimerA,使IOB8输出38KHz的PWM波形,供红外发射调制作
*P_INT_Ctrl=0x0010;
asm("irq on");
while(t_counter<=16)
{
*P_TimerA_Ctrl = 0x03f0;
}
*P_TimerA_Ctrl = 0x0036;
t_counter=0;
while(t_counter<=3)
{
*P_TimerA_Ctrl = 0x0036;
}
for(i=0;i<16;i++)
{
if(temp_data&0x8000)
{
t_counter=0;
while(t_counter<3)
{
*P_TimerA_Ctrl = 0x03f0;
}
t_counter=0;
while(t_counter<1)
{
*P_TimerA_Ctrl = 0x0036;
}
}
else
{
t_counter=0;
while(t_counter<1)
{
*P_TimerA_Ctrl = 0x03f0;
}
t_counter=0;
while(t_counter<1)
{
*P_TimerA_Ctrl=0x0036;
}
}
temp_data<<=1;//左移一位
}
}
///////////////////////////////////////////
//函数:unsigned int Rx_hanshu(void)
//描述:接收函数
//参数:无
//返回:接收到的数据
/////////////////////////////////////////////
unsigned int Rx_hanshu(void)
{
unsigned int j=0;
unsigned int temp_data=0;
*P_SystemClock=clock_A;//24.576--24.576/8
Set_TimerA_Data(start_dataA);//定时器A从0开始计数
Set_TimerA_Ctrl(stopA);//开始先不计数
*P_INT_Ctrl=0x0200;//开IRQ3_EXIT2中断
asm("irq on");
while(kk<18)
{
*P_Watchdog_Clear=0x01;
} //等待译码结束
//asm("nop");
if((r_timer[0]<1550)&(r_timer[0]>1400))//说明译码结束
{
for(j=1;j<=16;j++)
{
if((r_timer[j]<300)&(r_timer[j]>250))//说明数据位开始
{
temp_data=temp_data|1;
}
if((r_timer[j]<100)&(r_timer[j]>80))
{
temp_data|=0;
}
temp_data<<=1;
}
return (temp_data);
}
return (0xf001);
}
///////////////////////////////////////////
//函数:void init_keyIO(void)
//描述:键盘IO口初始化函数
//参数:无
//返回:无
/////////////////////////////////////////////
void init_keyIO(void)
{
PA_Dir->byte.byteh=0x0f;
PA_Attrib->byte.byteh=0x0f;
PA->byte.byteh=0x00;
}
///////////////////////////////////////////
//函数:unsigned int get_keyvalue(void)
//描述:键盘取值函数
//参数:无
//返回:返回相应的键值
/////////////////////////////////////////////
unsigned int get_keyvalue(void)
{
unsigned int keyhang[4]={0x0e,0x0d,0x0b,0x07};//行扫描码
unsigned int keyi=0;
for(keyi=0;keyi<4;keyi++)
{
PA->byte.byteh=keyhang[keyi];
if(P0_12==0)
{
while(P0_12==0)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4);
}
else if(P0_13==0)
{
while(P0_13==0)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4+1);
}
else if(P0_14==0)
{
while(P0_14==0)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4+2);
}
else if(P0_15==0)
{
while(P0_15==0)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4+3);
}
}
return 16;
}
///////////////////////////////////////////
//函数:unsigned int key_scan_delay(void)
//描述:加按键消抖的键盘扫描函数
//参数:无
//返回:有按键按下就返回1,否则返回0
/////////////////////////////////////////////
unsigned int key_scan_delay(void)
{
if(key_scan())
{
delay();//延时5ms
if(key_scan())
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
///////////////////////////////////////////
//函数:unsigned int key_scan(void)
//描述:键盘扫描函数
//参数:无
//返回:有按键按下就返回1,否则返回0
/////////////////////////////////////////////
unsigned int key_scan(void)
{
init_keyIO();
if(PA->byte.byteh==0xf0)
{
return 0;
}
else
{
return 1;
}
}
///////////////////////////////////////////
//函数:void delay(void)
//描述:键盘延时函数
//参数:无
//返回:无
/////////////////////////////////////////////
void delay(void)
{
unsigned int timei=5000;
while(timei--)
{
asm("nop");
}
}
///////////////////////////////////////////
//函数:void input_hanshu(void)
//描述:输入楼层号,输入格式:3-1
//参数:无
//返回:无
/////////////////////////////////////////////
void input_hanshu(void)
{
unsigned int count_i=0;
unsigned int key_temp1=0;
unsigned int key_f1=0;
//LCD_Init();
SetPaintMode(0,0xffff);
FontSet(0,0);
FontSet(1,0xffff);
while(count_i<3)
{
while((key_f1==0)|(key_temp1==16))
{
key_f1=key_scan_delay();
*P_Watchdog_Clear=0x01;
key_temp1=get_keyvalue();
}
key_f1=0;
number[count_i]=key_temp1+48;
PutChar(count_i,20,number[count_i]) ;
key_temp1=0;
count_i++;
}
key_temp1=0;
while(key_temp1!=15)
{
key_f1=0;
while(key_f1==0)
{
key_f1=key_scan_delay();
*P_Watchdog_Clear=0x01;
}
key_temp1=get_keyvalue();
}
data_key=(number[0]-48)*10+(number[2]-48);
key_temp1=read_flash(data_addr);
if(key_temp1==0xffff)//说明是第一次擦写
{
page_erase(data_addr);//擦除相应的页
switch(data_key)
{
case 10:write_flash(0x0001,data_addr);break;
case 11:write_flash(0x0002,data_addr);break;
case 12:write_flash(0x0004,data_addr);break;
case 20:write_flash(0x0008,data_addr);break;
case 21:write_flash(0x0010,data_addr);break;
case 22:write_flash(0x0020,data_addr);break;
case 30:write_flash(0x0040,data_addr);break;
case 31:write_flash(0x0080,data_addr);break;
case 32:write_flash(0x0100,data_addr);break;
default:break;
}
}
else
{
page_erase(data_addr);//擦除相应的页
switch(data_key)
{
case 10:write_flash((0x0001|key_temp1),data_addr);break;
case 11:write_flash((0x0002|key_temp1),data_addr);break;
case 12:write_flash((0x0004|key_temp1),data_addr);break;
case 20:write_flash((0x0008|key_temp1),data_addr);break;
case 21:write_flash((0x0010|key_temp1),data_addr);break;
case 22:write_flash((0x0020|key_temp1),data_addr);break;
case 30:write_flash((0x0040|key_temp1),data_addr);break;
case 31:write_flash((0x0080|key_temp1),data_addr);break;
case 32:write_flash((0x0100|key_temp1),data_addr);break;
default:break;
}
}
number[1]='-';
}
///////////////////////////////////////////
//函数:void looking_hanshu(void)
//描述:查询车库现有存车情况,并在lcd上显示结果
//参数:无
//返回:无
/////////////////////////////////////////////
void looking_hanshu(void)
{
unsigned int temp_num=0;
unsigned char gg[27]="3-2,3-1,3-0,2-2,2-1,2-0,1-2,1-1,1-0";
unsigned int gg_i=0;
temp_num=read_flash(data_addr);
for(gg_i=0;gg_i<9;gg_i++)
{
if(temp_num&0x0100)
{//在这里还要显示汉字:已经存有车的车库
PutChar(gg_i,3,gg[gg_i]);
PutChar(gg_i+1,3,gg[gg_i+1]);
PutChar(gg_i+2,3,gg[gg_i+2]);
PutChar(gg_i+3,3,gg[gg_i+3]);
}
else
{//在这里还要显示汉字:还没有存有车的车库
PutChar(gg_i,3,gg[gg_i]);
PutChar(gg_i+1,3,gg[gg_i+1]);
PutChar(gg_i+2,3,gg[gg_i+2]);
PutChar(gg_i+3,3,gg[gg_i+3]);
}
temp_num<<=1;
}
}
///////////////////////////////////////////
//函数:void control(unsigned int EN,unsigned int left,unsigned int right)
//描述:电机控制函数
//参数:使能位,左转控制位,右转控制位
//返回:无
/////////////////////////////////////////////
void control(unsigned int EN,unsigned int left,unsigned int right)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -