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

📄 main.c

📁 汉字转换内码程序 好东西大家一起分享
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Quanguo dianzi dasai
**                             http://www.jxust3jia1.com
**							        生活从这里起航!
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			xiaoqiang
** Created date:		2007-07-22
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:test1,2007.7.29
**
********************************************************************************************************/
#include "config.h"
#define		HC595_CS	1<<29
#define		LEDS8		0XFF<<18
#define		BEEP		1<<8//pwm0.8
#define  KEYSCAN      	(0X3F<<16)
uint32 KEY_N;
uint8 i,j=0;
/*******************************************************************************************************
**函数名称:DelayNS()
**函数功能:长软件延时
**入口参数:dly  延时参数,值越大,延时越久
**出口参数:无
*******************************************************************************************************/
void DelayNS(uint32	dly)
{	uint32	i;
	for(;dly>0;dly--)
		for(i=0;i<50000;i++);
}
/*********************************************************************************************************
** 函数名称: PWM_Int()
** 功能描述: PWM中断服务函数,取反控制蜂鸣器。
********************************************************************************************************/
void __irq PWM_Int(void)
{
    PWMIR = 0x01;                   // 复位PWM中断标志
    
    /* 取反LED9状态 */
    if((IO0SET & BEEP) == 0) IO0SET = BEEP;
    	else IO0CLR = BEEP;

    VICVectAddr = 0x00;				// VIC结束
}
/********************************************************************************************************
** 函数名称:MSPI_Init()
** 函数功能:初始化SPI接口,设置为主机。
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void  MSPI_Init(void)
{  
	//PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500;	// 设置管脚连接SPI
	PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ;
    S0PCCR = 0x52;		            // 设置SPI时钟分频
 	S0PCR  = (0 << 3) |				// CPHA = 0, 数据在SCK 的第一个时钟沿采样
 			(1 << 4) |				// CPOL = 1, SCK 为低有效
 			(1 << 5) |				// MSTR = 1, SPI 处于主模式
 			(0 << 6) |				// LSBF = 0, SPI 数据传输MSB (位7)在先
 			(0 << 7);				// SPIE = 0, SPI 中断被禁止
}
/********************************************************************************************************
** 函数名称:MSPI_SendData()
** 函数功能:向SPI总线发送数据。
** 入口参数:data   待发送的数据
** 出口参数:返回值为读取的数据
********************************************************************************************************/
uint8  MSPI_SendData(uint8 data)
{  
    IOCLR = HC595_CS;			        // 片选74HC595
   
    SPI_SPDR = data;
    while( 0 == (SPI_SPSR & 0x80));		// 等待SPIF置位,即等待数据发送完毕
   
    IOSET = HC595_CS;
    return(SPI_SPDR);
}
uint8 const DISP_TAB[11] = {0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0X90,0XFF};
uint8 const LED_TBL[9]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0xFF};

void WaitKey(void)
{  	uint32  j;
   
   	while(1)
   	{  	
   		while( (IO0PIN&KEYSCAN) ==KEYSCAN);
   	    for(j=0; j<50000; j++);				
      	if((IO0PIN&KEYSCAN) !=KEYSCAN) break;	
   	}
    KEY_N=(IO0PIN&KEYSCAN);
   	while((IO0PIN&KEYSCAN) ==0);
   
}
int main (void)
{	
	PINSEL0=0X00005500;
	PINSEL1=0X00000000;
	PINSEL2=0X00000000;
	IO0DIR=HC595_CS|BEEP;
	IO1DIR=LEDS8;
	IO0SET=BEEP;
	MSPI_Init();
	 /* PWM作为定时器时的初始化 */
   	PWMTC   = 0;					// 定时器设置为0
	PWMPR   = 0;					// 时钟不分频
	PWMMCR  = 0x03;					// 设置T0MR0匹配后复位T0TC,并产生中断标志
	PWMMR0  = Fpclk / 2;			// 0.5秒钟定时
	 IRQEnable();
	IO1CLR=LEDS8;
	DelayNS(300);
	MSPI_SendData(DISP_TAB[8]);
	DelayNS(300);
	IO1SET=LEDS8;
	MSPI_SendData(DISP_TAB[10]);
	while(1)
	{	WaitKey();
		switch(KEY_N>>16)
		{case 0x3e:
			{for(j=0;j<10;j++)
			{
			for(i=0;i<8;i++)
				{IO1SET=(~(LED_TBL[i]<<18));
				 IO1CLR=(LED_TBL[i]<<18);
				 DelayNS(50);
				 }
				MSPI_SendData(DISP_TAB[j]);
			}
			   
PWMTCR   = 0x09;            // 启动PWM输出
 
 	/* 设置PWM中断 
    VICIntSelect = 0x00000000;		// 所有中断连接IRQ
    VICVectCntl0 = 0x20 | 8;		// 选择通道0
    VICVectAddr0 = (int)PWM_Int;	// PWM中断服务程序地址
    VICIntEnable = (1 << 8);		// 使能PWM中断*/

			  break;}
		 case 0x3d:{VICIntEnable = (0 << 8);		// 使能PWM中断
		 			 PWMTCR=0X00;
		 			 IO0SET=BEEP;
		 			break;}
		 case 0x3b:{MSPI_SendData(DISP_TAB[10]);
		 			VICIntEnable = (0 << 8);		// 使能PWM中断
		 			PWMTCR=0X00;
		 			IO1SET=LEDS8;
		 			IO0SET=BEEP;
		 			break;
		 			}
		 			
		default:break;
		}
	} 
			 
    return 0;
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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