⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usr.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 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 + -