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

📄 testboard1.c

📁 PIC MCU开发用的一个小工具,用于对某些外设芯片子程序的调试,有2个按键2x20的字符LCD,3个I/O,1个UART,非常好用,包含SCHPCB 以及初始化C代码.
💻 C
📖 第 1 页 / 共 2 页
字号:
	#include <pic.h>
	#include <pic16630.h>

/**************端口定义**************
************************************/
	#define	port0		RA0		//用户IO端口0
	#define	SCB			RA1		//用户IO端口1
	#define	SCB_T		TRISA1	
	#define	port2		RA2		//用户IO端口2
	#define	port3		RA3		//用户输入端口
	#define	incsel		RA4		//按键DEC
	#define	decent		RA5		//按键INC
	#define	dis_clk		RC0		//显示数据输出时钟
	#define	dis_data	RC1		//显示数据输出端口
	#define	dis_rs		RC2		//显示命令/数据选择
	#define	dis_en		RC3		//显示使能控制
	#define	txd			RC4		//URAT发送端
	#define	rxd			RC5		//URAT接收端
	#define buzz		RC5		//蜂鸣器

/********特殊寄存器初始化参数********
************************************/
	#define	TRISA_CODE		0X3e
/*	TRISA
		5	4	3	2	1	0
		I	I	I	I	i	O
		|	|	|	|	|	|->用户端口0
		|	|	|	|	|----->用户端口1
		|	|	|	|--------->用户端口2
		|	|	|------------->用户输入端口2
		|	|----------------->按键输入1
		|--------------------->按键输入2
*/
	#define	IOCA_CODE		0X00
	#define	TRISC_CODE		0X00
/*	TRISC
		5	4	3	2	1	0
		O	O	0	0	0	0
		|	|	|	|	|	|->显示时钟输出
		|	|	|	|	|----->显示数据输出
		|	|	|	|--------->命令/数字选择
		|	|	|------------->LCD EN使能
		|	|----------------->TXD
		|--------------------->BUZZ(RXD)
*/
	#define	WPUA_CODE		0X33	//A口弱上拉
	#define	ANSEL_CODE		0X00	//A/D模拟/数字端口选择
/*	ANSEL
		7	6	5	4	3	2	1	0
		|	|	|	|	|	|	|	|->RA0
		|	|	|	|	|	|	|----->RA1
		|	|	|	|	|	|--------->RA2
		|	|	|	|	|------------->RA4
		|	|	|	|----------------->RC0
		|	|	|--------------------->RC1
		|	|------------------------->RC2
		|----------------------------->RC3
*/
	#define	OPTION_CODE		0X47
/*	OPTION
		7	6	5	4	3	2	1	0
		|	|	|	|	|	|	|	|->\
		|	|	|	|	|	|	|------->T0前分频选择
		|	|	|	|	|	|--------->/
		|	|	|	|	|------------->预分频使用选择(为0时T0使用)
		|	|	|	|----------------->T0记数边沿选择(0为上边沿触发)
		|	|	|--------------------->T0计数来源选择(为1RA2输入)
		|	|------------------------->INT中断边沿选择(0为下降沿触发)
		|----------------------------->A口弱上拉控制(为0打开)
*/
	#define PIE1_CODE		0x00
/*	PIE1
		7	6	5	4	3	2	1	0
		|	|	|	|	|	|	|	|->TMR1IE定时器1中断控制
		|	|	|	|	|	|	|----->
		|	|	|	|	|	|--------->
		|	|	|	|	|------------->CMIE比较器中断控制
		|	|	|	|----------------->
		|	|	|--------------------->
		|	|------------------------->ADIE模数变换中断控制
		|----------------------------->EEIE内部EEROM中断控制
*/
	#define ADCON1_CODE		0x00
//AD变换工作时钟选择,选择标准以转换时间>1.6uS为准,基准时钟是主振荡频率
	#define VRCON_CODE		0x00
//比较器控制
	#define	PORTA_CODE		0X00		
	#define	PORTC_CODE		0X00
	#define	INTCON_CODE		0X40
/*	INTCON
		7	6	5	4	3	2	1	0
		|	|	|	|	|	|	|	|->A口中断标志
		|	|	|	|	|	|	|----->INT中断标志
		|	|	|	|	|	|--------->T0中断标志
		|	|	|	|	|------------->A口变化中断允许
		|	|	|	|----------------->INT中断允许
		|	|	|--------------------->T0中断允许
		|	|------------------------->外部中断总控制
		|----------------------------->中断总控制
*/
	#define T1CON_CODE		0X00
/*	T1CON
7	6	5	4	3	2	1	0
|	|	|	|	|	|	|	|->
|	|	|	|	|	|	|----->T1外部计数门控位(0开计数,1外部控制为0时计数)
|	|	|	|	|	|--------->\
|	|	|	|	|--------------->前分频选择
|	|	|	|----------------->LP外部时钟选择(1使能外部时钟)
|	|	|--------------------->外部时钟同步选择(0同步输入)
|	|------------------------->时钟来源选择(0为内部时钟,1为RA5输入)
|----------------------------->计数控制位(1开始计数)
*/
	#define ADCON0_CODE		0x00
/*	ADCON0
7	6	5	4	3	2	1	0
|	|	|	|	|	|	|	|->数据格式选择(为0数据靠高端)
|	|	|	|	|	|	|----->基准电压选择(为1由RA1提供)
|	|	|	|	|	|--------->
|	|	|	|	|------------->\
|	|	|	|------------------->通道选择
|	|	|--------------------->/
|	|------------------------->AD变换启动位(为1启动,硬件清零)
|----------------------------->AD模块电源控制(为1开启)
*/
	#define	CMCON_CODE		0X07
//关闭比较器功能

/***************常数定义*************
************************************/
	const unsigned char welcome_words[]="PICMCU software test";
	const unsigned char type_words[]="     Ver 1.0  051210";

/***************变量定义*************
************************************/
	static volatile unsigned char discpsw0;	//碟机状态
	static volatile unsigned char discpsw1;
	static volatile unsigned char discpsw2;
	static volatile unsigned char discpsw3;
	static volatile unsigned char discpsw4;
	static volatile unsigned char discpsw5;
	static volatile unsigned char discpsw6;
	static volatile unsigned char discpsw7;
	static volatile unsigned char softpsw;
/*	softpsw
7	6	5	4	3	2	1	0
|	|	|	|	|	|	|	|->数据读取标志(为1正在读取)
|	|	|	|	|	|	|----->数据准备好标志(为1准备好)
|	|	|	|	|	|--------->显示标志
|	|	|	|	|------------->
|	|	|	|----------------->
|	|	|--------------------->
|	|------------------------->
|----------------------------->
*/
	static volatile unsigned char nowdisc;
	static volatile unsigned char nowtrackH;
	static volatile unsigned char nowtrackL;
	static volatile unsigned char nowminH;
	static volatile unsigned char nowminL;
	static volatile unsigned char nowsecH;
	static volatile unsigned char nowsecL;
	static volatile unsigned char playpsw;
/*	playpsw
7	6	5	4	3	2	1	0
|	|	|	|	|	|	|	|->为1扫描播放
|	|	|	|	|	|	|----->
|	|	|	|	|	|--------->
|	|	|	|	|------------->
|	|	|	|----------------->
|	|	|--------------------->
|	|------------------------\
|----------------------------->00无重复,01重复单曲,10重复所有
*/	
	static volatile unsigned char playpar[]=" D-    T-  :";
	static volatile unsigned char playstate[]="  ALP Changer";

/******************************************
特殊寄存器设置函数;sfr_setup
  作用:初始化内部特殊寄存器;
  入口:无;
  出口:无;
*******************************************/
	void sfr_setup(void)
	{
//BANK1
	TRISA=TRISA_CODE;
	TRISC=TRISC_CODE;
	OPTION=OPTION_CODE;
	PIE1=PIE1_CODE;
	ANSEL=ANSEL_CODE;
	ADCON1=ADCON1_CODE;
	IOCA=IOCA_CODE;
	WPUA=WPUA_CODE;
//BANK0
	PORTA=PORTA_CODE;		
	PORTC=PORTC_CODE;
	INTCON=INTCON_CODE;
	T1CON=T1CON_CODE;
	ADCON0=ADCON0_CODE;
	CMCON=CMCON_CODE;
	}
/*********************************************************************************

								双机通讯管理

*********************************************************************************/
/************************************************************
延时函数d7uS()
  作用:延时7uS
************************************************************/
	void d7uS(void)
	{
	 asm("nop");
	 asm("nop");
	}
/************************************************************
延时函数d17uS()
  作用:延时17uS
************************************************************/
	void d17uS(void)
	{
	 unsigned char cnt;
	 for(cnt=3;cnt>0;cnt--);
	 asm("nop");asm("nop");
	}
/************************************************************
延时函数d100uS()
  作用:延时100uS
************************************************************/
	void d100uS(void)
	{
	 unsigned char cnt;
	 for(cnt=23;cnt>0;cnt--)
	 	{asm("nop");}
	 asm("nop");asm("nop");
	}
/************************************************************
数据发送函数data_send()
  作用:发送1字节数据
  入口:待发送的数据
  出口:无
************************************************************/
	void data_send(unsigned char data)
	{
	 unsigned char cnt;	 
	 GIE=0;				//关闭总中断
	 SCB=0;				
	 SCB_T=0;		//获得总线控制权
	 d100uS();		//起始信号(低电平1mS)
	 d100uS();
	 for(cnt=8;cnt>0;cnt--)
		{
		 SCB=1;				//同步头信号
		 d7uS();
		 if(data&0x80)
			SCB=1;			//输出数据1
		 else
			SCB=0;			//输出数据0
		 d17uS();data<<=1;
		 SCB=0;				//位结束信号
		 d7uS();
		}
	 SCB=1;
	 SCB_T=1;		//放弃总线控制权
	 INTF=0;
	 GIE=1;				//开总中断
	}
/************************************************************
数据接收函数data_rec()
  作用:接收1字节数据
  入口:待发送的数据
  出口:接收到的一字节数据
************************************************************/
	unsigned char data_rec(void)
	{
	 unsigned char cnt,temp;
	 temp=0;
	 SCB_T=1;
	 for(cnt=8;cnt>0;cnt--)
		{
		 while(SCB);		//等待低电平
		 while(!SCB);		//等待同步信号头
		 temp<<=1;
		 d17uS();			//延时到数据区
		 if(SCB)			//读取数据
			temp|=0x01;
		 else
			temp&=0xfe;
		}
	 return(temp);
	}
/******************************************
LCD操作延时函数d256us();
  作用:延时256uS;
  入口:无;
  出口:无;
  说明:用于LCD的操作延时
*******************************************
	void d256uS(void)
	{
	 unsigned char i;
	 for(i=83;i>0;i--);
	}
/******************************************
延时函数d4ms();
  作用:延时4ms
  入口:无
  出口:无
  说明:用于LCD初始化
******************************************
	void d4mS(void)
	{
	 unsigned int i;
	 for(i=443;i>0;i--);
	}
/******************************************
延时函数d10ms();
  作用:延时10ms
  入口:无
  出口:无
******************************************
	void d10mS(void)
	{
	 unsigned int i;
	 for(i=909;i>0;i--);
	}
/******************************************
串行移位寄存器操作函数ttl14164()
  作用:传送8BIT数据到74hc164中
  入口:待传送的8位数据;
  出口:无;
  说明:字节传送顺序为MSB->LSB
*******************************************
	void ttl74164(unsigned char data)
	{
	 unsigned char temp,cnt;
	 temp=data;
	 for(cnt=8;cnt>0;cnt--)
		{
		 if(temp&0x80)
	 	 	dis_data=1;
		 else
			dis_data=0;
	 	 temp=temp<<1;
	 	 dis_clk=0;
	 	 dis_clk=1;
     	}
	 dis_data=0;
	}

⌨️ 快捷键说明

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