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

📄 main.c

📁 1、arm7芯片2148驱动大液晶 2、ym320240的液晶驱动 3、I2c通信at24c256 4、各种字符的显示
💻 C
字号:
#include "lcd.h"
#include "font.h"
#include "key.h"
#include "I2c.h"
#include <math.h>
#include <absacc.h>
#include <string.h>

Ushort16 Cursor_num;                    //在数据表格中,光标的位置
Uchar8 Screen_num = 0;					//显示的屏幕
Uchar8 Key_Code = 0;					//按键值
Uchar8 Enter_mode = 0;                  //进入数据显示模式
Uint32 Scan_num;						//扫描次数
Str_Setup Parameter_Setup;					//测试设置
Str_Date Scan_Time_Data;					//扫描所用时间
Str_Date Time_Data;						//时间
Ushort16 Temper_num;					//温度
Uchar8 password_buf[8];                     //密码
Uchar8 AutoPreferences_buf[2];          //自动参数
Uchar8 TestManName_buf[10];          //测试人员名称
Uchar8 TestAddress_buf[10];          //测试地点名称
Uchar8 EquipmentName_buf[10];          //设备编号

Str_HisIndex His_Index;        //历史数据索引
Str_Save Save_His;            //何存历史数据

Uchar8 num_buf[10];						//临时数据处理缓存器
Uchar8 Disp_buf[9];						//临时显示数据处理缓存器
Uint32 Hv_Data_buf[19][4];					//高压侧显示数据的缓存器
Uint32 Lv_Data_buf[17][4];					//低压侧显示数据的缓存器
Uint32 Testing_Data_buf[3][3];				//测试数据


/*********************************************************************************************************
** 函数名称: void mian(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
** 作 者:
** 日 期:
** 功能描述: 主函数 
********************************************************************************************************/
void DELAY(Uint32 yy)
{
	int i,j;
	for(i=0;i<2000;i++)
	{ 
		for(j=1;j<yy;j++)
		{
            ;		
        }
	}
 }
/*********************************************************************************************************
** 函数名称: void mian(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
** 作 者:
** 日 期:
** 功能描述: 主函数 
********************************************************************************************************/
 void Init_Data(void)
{
	Uchar8 temp_buf[4], n;
	Uchar8 temp_Data; 
	Ushort16 m;
	Ushort16 temp_addr;
	I2c_Mode = I2c_ModeRead;	   //设置读的模式
	I2c_ReadData(first_finger_Addr, temp_buf, 5);
	I2c_Mode = I2c_ModeStop;
	if((temp_buf[0] != 0xaa) || (temp_buf[1] != 0x55) || (temp_buf[2] != 0x55) || (temp_buf[3] != 0xaa))
	{ 
		for(m = 0; m < 64; m++)
		{
			temp_addr = m * 512;
			temp_Data = 0xff;
			I2c_Mode = I2c_ModeWr;
			I2c_WriteData(temp_addr, &temp_Data, 64);	   //写初始化EEPROM条件
			I2c_Mode = I2c_ModeStop;
		}
		temp_buf[0] = 0xaa;
		temp_buf[1] = 0x55;
		temp_buf[2] = 0xaa;
		temp_buf[3] = 0x55;

		I2c_Mode = I2c_ModeWr;
		I2c_WriteData(first_finger_Addr, temp_buf, 4);	   //写初始化EEPROM条件
		I2c_Mode = I2c_ModeStop;

		Time_Data.YE = 2008;
		Time_Data.MO = 9;
		Time_Data.DD = 11;
		Time_Data.HH = 17;
		Time_Data.MI = 50;
		Time_Data.SS = 1;

		Temper_num = 12345;

		for(m = 0; m < 19; m++)					  //初始化显示的数据,当为0xffffffff时不显示
		{
			for(n = 0; n < 4; n++)
			{
				Hv_Data_buf[m][n] = 0xffffffff;					//初始化高压侧显示数据的缓存器
				if(m < 17)
				{	
					Lv_Data_buf[m][n] = 0xffffffff;					//低压侧显示数据的缓存器
				}
			}
		}
		for(m = 0; m < 3; m++)					  //初始化显示的数据,当为0xffffffff时不显示
		{
			for(n = 0; n < 3; n++)
			{
				Testing_Data_buf[m][n] = m;
			}
		}
	
	    for(m = 0; m < 10; m++)					  //初始化显示的数据,当为0xffffffff时不显示
		{
	        TestManName_buf[m] = 65;          //测试人员名称
	        TestAddress_buf[m] = 65;          //测试地点名称
	        EquipmentName_buf[m] = 65;          //设备编号
		}

        password_buf[0] = 'h';          //密码
		password_buf[1] = 'z';          //密码
		password_buf[2] = 'h';          //密码
		password_buf[3] = 'd';          //密码
		password_buf[4] = 'd';          //密码
		password_buf[5] = 'd';          //密码

		I2c_Mode = I2c_ModeWr;
		I2c_WriteData(password_Addr, password_buf, 6);	 //保存密码
		I2c_Mode = I2c_ModeStop;


	    for(m = 0; m < 80; m++)					  //初始化显示的数据,当为0xffffffff时不显示
	    {
	        His_Index.EquipmentName_buf[m][0] = 0xff;    //设备编号
	        His_Index.EquipmentName_buf[m][1] = 0xff;    //设备编号
	        His_Index.Save_Current = 0;
	    }

	
		Parameter_Setup.Hv_Channels = 1;					//三通道与单通道选择, 0表示单通道,1表示多通道
		Parameter_Setup.Lv_Channels = 1;					//三通道与单通道选择, 0表示单通道,1表示多通道
		Parameter_Setup.Hv_tap_num = 3;					//高压的分接数
		Parameter_Setup.Lv_tap_num = 5;					//高压的分接数
		Parameter_Setup.Hv_Ampen =5;					//高压侧测试电流
		Parameter_Setup.Lv_Ampen = 5;					//高压侧测试电流
		Parameter_Setup.Work_Mode = 0;					//工作模式, 0表示手动,1表示自动
	    His_Index.Save_Used = 80;

		I2c_Mode = I2c_ModeWr;
		I2c_WriteData(Parameter_Setup_Addr, (Uchar8 *)&Parameter_Setup.Hv_Channels, 6);	 //保存参数
		I2c_Mode = I2c_ModeStop;
	}
	else 
	{
		I2c_Mode = I2c_ModeRead;	   //设置读的模式
		I2c_ReadData(first_finger_Addr, temp_buf, 5);
		I2c_Mode = I2c_ModeStop;



	}
		

}

/*********************************************************************************************************
** 函数名称: void INTERRUPT_Init(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
** 作 者:
** 日 期:
** 功能描述: 主函数 
*******************************************************************************************************/

void INTERRUPT_Init(void)
{
	 VICIntSelect = 0x00000000;        //所有中断通道设置为IRQ中断
	 VICIntEnable = 0x00000000;     //清除所有中断使能

//	 VICDefVectAddr = (Uint32)Key_IRQ;
//	 VICIntEnable |= Interrupt_AD0;   //AD0中断使能

//	 VICVectCntl0 = 0x20 | 21;     //串口0中断通道分配最高优先级(向量近制器1)
//	 VICVectAddr0 = (Uint32)Key_IRQ;  //设置UART0向量地址
//	 VICIntEnable = Interrupt_AD1;   //设置串口0中断使能

	 VICVectCntl0 = 0x20 | VIC_I2C0;     //I2C0中断通道分配最高优先级(向量近制器1)
	 VICVectAddr0 = (Uint32)I2c_IRQ;  //设置I2C0向量地址
	 VICIntEnable = Interrupt_I2C0;   //设置I2C0中断使能


/*
	 VICVectCntl2 = 0x00000026;     //串口0中断通道分配最高优先级(向量近制器1)
	 VICVectAddr2 = (unsigned int)UART2_IRQ;  //设置UART0向量地址
	 VICIntEnable |= Interrupt_UART0;   //设置串口0中断使能
	 
	 VICVectCntl3 = 0x00000027;     //串口1中断通道分配最高优先级(向量近制器2)
	 VICVectAddr3 = (unsigned int)UART1_IRQ;  //设置UART1向量地址
	 VICIntEnable |= Interrupt_UART1;   //设置串口1中断使能
	 VICVectCntl1 = 0x00000024;     //TIMER0中断通道分配最高优先级(向量近制器3)
*/

	 EXTINT = 0x0f;			 //清除所有中外部中断标志位
}


/*********************************************************************************************************
** 函数名称: void mian(void)
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
** 作 者:
** 日 期:
** 功能描述: 主函数 
********************************************************************************************************/
int main(void)
{
	Uchar8 m;

	Init_Data();
	I2C0_Init();
	INTERRUPT_Init();
	Key_init();
	LCD_Init();

	Dis_Lcd_Start();
	DELAY(10000);
	LCD_CLR();
	Screen_num = 2;			//选显示测试设置界面

	LCD_CLR();
	Dis_Lcd_Data(0);

	Dis_Lcd_Data_Wr(0x8000,  Testing_Data_buf[0]);
	Dis_Lcd_Data_Wr(0x8001,  Testing_Data_buf[0]);
	Dis_Lcd_Data_Wr(0x8002,  Testing_Data_buf[0]);
//	LCD_CLR();

//	Time_Data.YE = 2008;
//	Time_Data.MO = 9;
//	Time_Data.DD = 20;
//	Time_Data.HH = 17;
//	Time_Data.MI = 50;
//	Time_Data.SS = 1;

//	Dis_Lcd_Test();
//	Dis_Lcd_Test_Wr(0x8002, Testing_Data_buf[0]);
//	Testing_Data_buf[0][0] = 10;
//	Testing_Data_buf[0][1] = 100;
//	Testing_Data_buf[0][2] = 100;
//	Dis_Lcd_Test_Wr(0x8000, Testing_Data_buf[0]);

//	LCD_WriteCMD(CSRFORM);				//CSRFORM = 0x5d 该指令设置了光标的显示方式及其形状
//	LCD_WriteData(0x07);				   //设置参数光标指针低8位
//	LCD_WriteData(0x8f);				   //设置参数光标指针低8位
	for(m = 0; m < 10; m++)
	{
		TestManName_buf[m] = m;
	}
	
	while(1)
	{
		if(Screen_num == 0)		//显示数据界面
		{
			LCD_CLR();
			Dis_Lcd_Set(0);
			Deal_Lcd_set_data(Enter_mode);
		}
		else if(Screen_num == 1)		//显示启动界面
		{
			LCD_CLR();
			Dis_Lcd_Set(1);
			Deal_Lcd_set_Test();
		}
		else if(Screen_num == 2)		//显示启动系统设置界面
		{
			LCD_CLR();
			Dis_Lcd_Set(2);
			Deal_Lcd_set_system();
		}
		else if(Screen_num == 3)		//显示数据界面
		{
			LCD_CLR();
			Dis_Lcd_Data(0);
			Deal_Lcd_Data();
		}
		else if(Screen_num == 4)		//显示测试界面
		{
			LCD_CLR();
            Dis_Lcd_Test();
			Deal_Lcd_Testing();
//Testing_Data_buf[0][0] = 99;
//Testing_Data_buf[0][1] = 98;
//Testing_Data_buf[0][2] = 97;
//Dis_Lcd_Test_Wr(0x8000, Testing_Data_buf[0]);
		}
        else if(Screen_num == 5)		//显示提界面,是否保存当前数据
		{
			LCD_CLR();
            Dis_Lcd_SaveLable();
            Deal_Lcd_SaveLable(Enter_mode);
		}
        else if(Screen_num == 6)		//显示历史数据界面
		{
			LCD_CLR();
			Dis_Lcd_Data(1);
			Deal_Lcd_HisData();
		}
        else if(Screen_num == 7)		//册除历史数据界面
		{
			LCD_CLR();
            Dis_Lcd_DelLable();
            Deal_Lcd_DelLable(Enter_mode);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -