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

📄 main000.c

📁 本文件是I2C总线读写测试程序;将跳线器JP6短接
💻 C
字号:

/* 摘 要: 本文件是I2C总线读写测试程序;将跳线器JP6短接,使用外部22.1184MHz晶振.
*   	  功能:定义'0'~'9'键为数字键,'A'~'F'为功能键。按'A' 键后,可按0'~'9'数字键,
*		  从零地址开始存储该键值,并送LED数码管上显示该键值。按'B' 键后,从零地
*		  址开始读取数据值,并送LED数码管上显示。读取速度每秒一次。按'C' 键后,
*         停止任何操作。
* 
*************************************************************************************/

/************************************************************************************/
// 引用外部头文件 

#include <c8051f020.h>
#include <I2C.h>
#include <Delay.h>
#include <key.h>
#include <SPI.h>

/************************************************************************************/

/************************************************************************************
//  系统初始化功能子程序
*************************************************************************************/

/***********************************************************************************
* 函数名称:SYSCLK_Init;
*
* 函数功能描述:系统时钟初始化,使用外部22.1184MHz晶振作为时钟源;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void SYSCLK_Init (void)
{
   int i;                              // 延时计数器

   OSCXCN = 0x67;                      // 使用外部22.1184MHz晶振

   for(i=0; i<256; i++);               // 等待1ms

   while(!(OSCXCN & 0x80));            // 等待外部振荡器稳定

   OSCICN = 0x88;                      // 切换到外部晶振
}

/***********************************************************************************
* 函数名称:PORT_Init;
*
* 函数功能描述:配置端口初始化,配置交叉开关和端口;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void PORT_Init (void)
{

	XBR0   =   0x8f;                    //设置XBR0
	XBR1   =   0x1e;                    //设置XBR1
	XBR2   =   0x44;                    //打开交叉开关和弱上拉
   
	P0MDOUT = 0x34;						//设置P0口输出
	P1MDOUT = 0xfc;						//设置P1口输出
	P1MDIN  = 0xff;						//设置P1口输入信号类型
	P2MDOUT = 0xf0;						//设置P2口输出
	P3MDOUT = 0xff;						//设置P3口全部推挽输出
    P74OUT  = 0xf7;						//设置P4-P7口输出
    P4 = 0xe0;							//P4口置0,禁铃

    EMI0CF=0x2d;						//外部存储器接口配置
    EMI0TC=0X9e;						//外部存储器时序控制

}

/************************************************************************************
//  主循环程序
*************************************************************************************/

void main(void)
{
	unsigned char data aa[1];
	unsigned char data ww[1];
	unsigned char data set[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
	unsigned char keyvalue;
	unsigned int xdata addr;
	unsigned char count;
	count=16;

	WDTCN = 0xde;		// disable watchdog timer
	WDTCN = 0xad;

	SYSCLK_Init();
	PORT_Init();
	SMBusInit();
	SPI_Init();
	Key_Init();
	EA=1;

	addr=0;
    while(1)
    {
		keyvalue=GetKey();	//调用键盘扫描函数,返回的键值送变量key
		if(keyvalue!=0xFF)
		{
			Alarm(1);
			Delay_ms(50);
			Alarm(0);		//关闭铃声
			if(keyvalue==0x0a)
			{
				addr=0;
				while(1)
				{
					aa[0]=GetKey();
					if(aa[0]<0x0a)
					{
						Alarm(1);
						Delay_ms(50);
						Alarm(0);	
						WriteI2C(aa,addr,1);
						Delay_ms(50);
						ReadI2C(ww,addr,1);				
						SPI_Send(Key_SPI(ww[0]));
						addr++;
					}
					else if(aa[0]==0x0c)
					{
						Alarm(1);
						Delay_ms(50);
						Alarm(0);	
						break;
					}
					else
						Delay_ms(50);
				}
			}
			else if(keyvalue==0x0b)
			{
				Alarm(1);
				Delay_ms(50);
				Alarm(0);
//				WriteI2C(set,addr,16);

				addr=0;
				while(1)
				{
					ReadI2C(ww,addr,1);				
					SPI_Send(Key_SPI(ww[0]));
					addr++;
					count--;
					if(count==0)
					{
						count=16;
						addr=0;
					}
					Delay_s(1);
					aa[0]=GetKey();
					if(aa[0]==0x0c)
					{
						Alarm(1);
						Delay_ms(50);
						Alarm(0);	
						break;
					}
				}
			}
			else
				Delay_ms(50);
		}
	}
}

/***********************************************************************************/
// 文件结束
/***********************************************************************************/

⌨️ 快捷键说明

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