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

📄 main.c.bak

📁 44B0的测试程序。此程序为44B0的4*4键盘的应用程序
💻 BAK
字号:
/****************************************************************************
** File Name: main.c
** Description:
** Generated Automatically for: ARM7TDMI-S3c4510b Evaluation Board.
** Time: Monday, May 26, 2003 11:08:05
** Copyright 1999-2004 Jedi Systems Inc.
****************************************************************************/
#include <string.h>
#include <stdio.h>
#include "44b.h"
#include "uart_ev44b0.h"
//static char buf[100];
//static int j=0;
#define led_Address 0x6000000
extern int port_init(int);
int _write (int file, char *ptr, int len);
void Led_Display(unsigned char data);
void print (char *ptr);
void __irq keyboard(void);




int Main() //头字母必须为大写
{ 
        int i;
        char *str = "abcdefg\nhijklnmopqrstuvwxy1234567\n";
        char buf[100];
//        char p[100];
        i = sizeof (str);
        *((unsigned int *)PLLCON) = 0x48032; //set clock to be 40M
        port_init(0);       //初始化串口0
        /* 检测串口的 I/O */
        dev_uart_init (0, 0, 0);

        crtio (115200);  /* 改变波特率 */
        buf[18] = 0;
       /*设置键盘中断*/
        rEXTINT=0x22222222;//下降沿触发
        /* EINT7 EINT6 EINT5 EINT4 EINT3 EINT2 EINT1 EINT0*/
        /* 0010  0010  0010  0010  0010  0010  0010  0010 */
        /* 0000-低电平触发;0001-高电平触发;001X-下降沿触发*/
        /* 010X-上升沿触发;011X-边沿触发                    */
        rINTCON=0x5;//禁止IRQ的“矢量中断模式”,使能CPU响应IRQ中断的请求,禁止CPU响应FIR中断的请求。
        pISR_EINT0=(unsigned)keyboard;//修改中断处理函数指针
        rINTMOD=0x0;	  // 均为IRQ模式
        rINTMSK =~(BIT_GLOBAL|BIT_EINT0); //开启中断
        //F端口
        //IICSCL IICSDA  nWAIT nXBACK0 nXDREQ0 GPF5 GPF6 GPF7 GPF8 
        //  10     10      10    10      10     0    0    0    0  //GF4-GF7定义为输入,键值读入口
        rPCONF=0x2A;                
        rPUPF=0xff;         //内部上拉

        //G端口
        //EINT0 EINT1 EINT2 EINT3 GPG4 GPG5 GPG6 GPG7
        //	  0x0
        //  11      11   11     11   01   01   01   01   //GP4-GP7定义为输出,用于输出扫描码
        rPDATG=0x0;                  //输出低电位
        rPCONG=0x55FF;//工作模式的设定
        rPUPG=0xf;   //内部上拉
    

  while (1) {
        printf ("printed by printf\n");
        printf ("printed by printf again\n");
        printf("%f\n",128.001);
     
            } 
 return (i);
}


void print (char *ptr)
{
        while (*ptr)  outbyte(*ptr++);
        
}



/******************** S3C44B0X EV. BOARD LED **********************/
//		 -g--		a: data0	b: data1		
//	       a/_b_/f		c: data2	d: data3	dp: data4
//	       c/_d_/e dp	e: data5	f: data6	g: data7
void Led_Display(unsigned char data)
{
    unsigned char * ledbuffer = (unsigned char *)led_Address;
    
    switch(data){
    case 0:
    	*ledbuffer=0x12;
    	break;
    case 1:
    	*ledbuffer=0x9F;
    	break;
    case 2:
    	*ledbuffer=0x31;
    	break;
    case 3:
    	*ledbuffer=0x15;
    	break;
    case 4:
    	*ledbuffer=0x9C;
    	break;
    case 5:
    	*ledbuffer=0x54;
    	break;
    case 6:
    	*ledbuffer=0x50;
    	break;
    case 7:
    	*ledbuffer=0x1F;
    	break;
    case 8:
    	*ledbuffer=0X10;
    	break;
    case 9:
    	*ledbuffer=0x14;
    	break;
    case 0xa:
    	*ledbuffer=0x8;
    	break;
    case 0xb:
    	*ledbuffer=0xC0;
    	break;
    case 0xc:
    	*ledbuffer=0x62;
    	break;
    case 0xd:
    	*ledbuffer=0x81;
    	break;
    case 0xe:
    	*ledbuffer=0x60;
    	break;
    case 0xf:
    	*ledbuffer=0x68;
    	break;
    }

}


/********************读键函数****************************************/
/*任意键按下产生中断,中断口INT0*/
/*GPG4-GPG7对应1-4列,GPF5-GPF7对应1-4行*/
/********************读键函数****************************************/
void __irq keyboard(void)  //_irq用于定义一个中断函数
{
    char x,y,xrecord,yrecord,temp,i;
    
     rI_ISPC=BIT_EINT0;	/*rI_ISPC为IRQ中断服务清除寄存器,一旦被置位INTPND中的相应位被置零*/
                          

       Delay(200);
    if((rPDATF&0x1E0)==0x1E0)        //无键按下,退出 
       {
       	return;
       	}
    else                             //有键按下
    {
    	x=1;
    	y=1;
    	xrecord=(~((rPDATF&0x1E0)>>1));         
    	xrecord=xrecord>>4;			//键盘输入
    	while(xrecord!=0x1)			//确定行
    	{
    	  x=x+1;
    	  xrecord=xrecord>>1;
    	  if(xrecord==0)
    	    {
    		rPDATG=0X0F;                     //列输出全为1
    		return;
    	     }
   	}
    	rPDATG=0XEF;                               //列输出全为1
    	while((rPDATF&0x1E0)==0x1E0)               //找到列值退出             
   	 {
    	    rPDATG=rPDATG<<1;                      //逐列置低
    	    temp=rPDATG;
    	    if((temp&0xf0)==0XF0)                  //列扫描完毕
    	        {
    		rPDATG=0X0F;
    		return;
    		}    	
    	 }
   	 yrecord=~((rPDATG&0xF0)>>4)&0x0F;         //确定列值
   	 while(yrecord!=0x1)
    	{
    	      y=y+1;
    	      yrecord=yrecord>>1;
    	      if(yrecord==0)
    	        {
    		rPDATG=0X0F;
    		return;
    		}
    	}
    	for(i=0;i<1000;i++)Led_Display(x+(y-1)*4-1); //计算出键值并显示
    	Delay(100);
    	rPDATG=0X0F;//所有列置1
    }
}






⌨️ 快捷键说明

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