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

📄 switchinput.c

📁 一些用于电话管理的pc机下位机程序
💻 C
字号:
//该程序用于开关量的输入,并显示在与D口相连的LED上,S1~S8分别控制Q1~Q8
//开关量采用SPI方式通过74HC165输入,在调试程序时必须把8位的
//拔码开关拔向相应的位置,即把8个LED接到PORTD口上

#include	"p18f458.h"
volatile 	unsigned 	char 	data;

/*系统初始化子程序*/
void	initial()
{
	PIR1=0;							/*清除SSPIF标志*/
	SSPCON1=0x30;					/* SSPEN=1;CKP=0,FOSC/4 */
	SSPSTAT=0xC0;
	TRISC=0x10;						/*SDI引脚为输入,SCK引脚为输出*/
	TRISA=0x00;						/*A口为输出方式,用RA4作控制信号*/
	TRISD=0x00;						/*D口为输出方式*/
	INTCON=0x00;					/*关闭所有中断*/
}

/*SPI接收子程序*/
char 	SPIIN()
{	
	PORTAbits.RA4=0;					/*74HC165并行置数使能,将8位开关量置入器件*/
									/*(LOAD为低电平时8位并行数据置入74HC165)*/
	PORTAbits.RA4=1;					/*74HC165移位置数使能(LOAD为高电平时芯*/
									/*片才能串行工作)*/
	SSPBUF=0;						/*启动SPI,此操作只用于清除SSPSTAT的*/
									/*BF位,因此W中的实际数据无关紧要*/
	do{
	    ;
	}while(PIR1bits.SSPIF==0);			/*查询数据接收完毕否?*/
	PIR1bits.SSPIF=0;					/*清除SSPIF标志*/
	data=SSPBUF;
	return(data);						/*返回接收到的数据*/
}

/*把SPI接收的数据通过D口显示在8个发光二极管上的子程序*/
void	SPIOUT(char data)
{
	PORTD=~data;					/*因为LED与D口连接方式的要求,需把D口的*/
								/*输入量取反后才送出*/
}

/*主程序*/
main( )
{
	initial();						/*系统初始化*/
	while(1)
	{
		SPIIN();					/*SPI接收外部数据*/
		SPIOUT(data);				/*送出数据显示*/
	}
}

⌨️ 快捷键说明

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