📄 main.c.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 + -