/****************************************************************************
** File Name: main.c
** Description:
** Generated Automatically for: ARM7TDMI-S3c44b0x Evaluation Board.
** Time: Friday, August 13, 2004 11:42:11
** Copyright :wangyinfei
****************************************************************************/
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\option.h"
#include "www.h"
void Isr_Init(void)
{
U32 i;
//pISR_UNDEF=(unsigned)HaltUndef;
// pISR_SWI =(unsigned)HaltSwi;
// pISR_PABORT=(unsigned)HaltPabort;
//pISR_DABORT=(unsigned)HaltDabort;
for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)
{
*((volatile unsigned *)i)=0xEA000000+0x1FFE;
}
rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disable
rINTMOD=0x0; // All=IRQ mode
rINTMSK|=BIT_GLOBAL|BIT_EINT0; // All interrupt is masked.
}
int __main()
{
Isr_Init();
Port_Init();
Lcd_Init();
Lcd_Active_Clr();
Test_Kb( );
digit_led_Symbol(8);
Lcd_Active_Clr();
digit_led_Symbol(5);
disp16(bb,5,0);
digit_led_Symbol(4);
while(1)
{
digit_led_Symbol(3);
Test_Kb( );
digit_led_Symbol(2);
//keyboardint();
//init_keyboard();
}
}
/********************************
lcd.c文件
copyright:wangyinfei
**********************************/
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\ASII.H"
#include "..\inc\hanzi.h"
#define INT32U unsigned int
#define INT16U unsigned short
#define S32 int
#define S16 short int
#define INT8U unsigned char
#define U16 unsigned short int
#define INT16 short
int p=0;
int pp=0;
char * page[100];
/*******************************************
沿时程序
********************************************/
void delay(long n)
{
long i;
long k;
long j;
for(i=0;i<n;i++)
{
for(k=0;k<60;k++)
{
for(j=0;j<1000;j++)
{
int n=1;
int m=2;
}
}
}
}
/*****************************************
交换usY0,usY1
*****************************************/
void GUISWAP(INT16 * usY1,INT16 * usY0)
{ short M;
M=* usY1;
*usY1=*usY0;
*usY0=M;
return 0;
}
/*****************************************
*Embest arm教学系统软件宏定义
*****************************************/
#define M5D(n) ((n)&0x1fffff) //高3位清0宏
#define BLACK 0XFFFFFFFF
#define WHITE 0X0
/*****************************************
*S3C44B0X的lcd控制寄存器访问地址
*******************************************/
/*#define rLCDCON1 (*(voatile unsigned *)0x1f00000)
#define rLCDCON2 (*(voatile unsigned *)0x1f00004)
#define rLCDCON3 (*(voatile unsigned *)0x1f00040)
#define rLCDSADDR1 (*(voatile unsigned *)0x1f00008)
#define rLCDSADDR2 (*(voatile unsigned *)0x1f0000c)
#define rLCDSADDR3 (*(voatile unsigned *)0x1f00010)
#define rREDLUT (*(voatile unsigned *)0x1f00014)
#define rGREENLUT (*(voatile unsigned *)0x1f00018)
#define rBLUELUT (*(voatile unsigned *)0x1f0001c)
#define rDP1_2 (*(voatile unsigned *)0x1f00020)
#define rDP4_7 (*(voatile unsigned *)0x1f00024)
#define rDP3_5 (*(voatile unsigned *)0x1f00028)
#define rDP2_3 (*(voatile unsigned *)0x1f0002c)
#define rDP5_7 (*(voatile unsigned *)0x1f00030)
#define rDP3_4 (*(voatile unsigned *)0x1f00034)
#define rDP4_5 (*(voatile unsigned *)0x1f00038)
#define rDP6_7 (*(voatile unsigned *)0x1f0003c)
#define rDITHMODE (*(voatile unsigned *)0x1f00044)*/
/********************************************
s3cev40实验系统的lcd属性定义
********************************************/
#define MLCD_320_240 (3)
#define LCD_TYPE MLCD_320_240
#define SCR_XSIZE (160)
#define SCR_YSIZE (240)
#define LCD_XSIZE (160)
#define LCD_YSIZE (240)
/*********************************************
*s3c44b0x的lcd控制器宏定义
************************************************/
#define MIDE_GREY16 (16)
#define CLKVAL_GREY16 (13)
#define HOZVAL (LCD_XSIZE/4-1)
#define LINEVAL (LCD_YSIZE-1)
#define MVAL (13)
#define MVAL_USED 0
/**********************************************
*embest arm教学系统的lcd显示缓冲区
***********************************************/
#define ARRAY_SIZE_GREY16 (SCR_XSIZE/2*SCR_YSIZE)
#define LCD_BUF_SIZE (SCR_XSIZE*SCR_YSIZE/2)
#define LCD_ACTIVE_BUFFER (0xc400000)
#define LCD_VIRTUAL_BUFFER (0xc400000+LCD_BUF_SIZE)
/************************************************
*函数名:Lcd_Init()
*功能: 初始化lcd控制器
*参数: 无
*返回: 无
**************************************************/
void Lcd_Init(void)
{
rDITHMODE= 0X1223a;
rDP1_2 = 0x5a5a;
rDP4_7 = 0x366cd9b;
rDP3_5 = 0xda5a7;
rDP2_3 = 0xad7;
rDP5_7 = 0xfeda5b7;
rDP3_4 = 0xebd7;
rDP4_5 = 0xebfd7;
rDP6_7 = 0x7efdfbf;
/*---------------LCDCON1控制字清0----------------*/
rLCDCON1=(0)|(1<<5)|(MVAL_USED<<7)|(0X3<<8)|(0X3<<10)|(CLKVAL_GREY16<<12);
/*---------------LCDCON2控制字设置lcd分辨率320*240,水平线扫描空闲时间10mclk----------------*/
rLCDCON2=(LINEVAL)|(HOZVAL<<10)|(10<<21);
/*---------------LCDSADDR1-3为帧缓冲区起始地址----------------*/
rLCDSADDR1=(0X0<<27)|(((LCD_ACTIVE_BUFFER>>22)<<21)|M5D(LCD_ACTIVE_BUFFER>>1));
/*---------------设置:16级灰度,LCDBANK,LCDBDEU----------------*/
rLCDSADDR2=M5D(((LCD_ACTIVE_BUFFER+(SCR_XSIZE*LCD_YSIZE/2/4))>>1))|(MVAL<<21);
rLCDSADDR3=(LCD_XSIZE/4/4)|(((SCR_XSIZE-LCD_XSIZE)/4/4)<<9);
//重新设置lcdcon1:4位单扫描模式;WDLY=8CLK,WLH=8CLK
rLCDCON1=(1)|(1<<5)|(MVAL_USED<<7)|(0X3<<8)|(0X3<<10)|(CLKVAL_GREY16<<12);
rBLUELUT=0xfa40;
/*---------------LCD驱动逻辑使能,打开背光----------------*/
rPDATE=rPDATE&0X0e;
}
/*******************************************
描点函数,lcd像素显示
LcdPutPixel(x,y,c)-----发送到显示缓冲区(直接驱动lcd)
********************************************/
LcdPutPixel(INT16 x,INT16 y,INT8U c)
{ INT32U * buffer=(INT32U *)LCD_ACTIVE_BUFFER;
*(buffer+y*SCR_XSIZE/32+x/32)|=(0x80000000>>(x%32));
}
/**************************************************
//函数名 Lcd_Active_Clr()
//功能 清屏
//参数 无
//返回 无
**********************************************/
void Lcd_Active_Clr(void)
{
INT32U i;
INT32U * pDisp=(INT32U *)LCD_ACTIVE_BUFFER;
for(i=0;i<(SCR_XSIZE*SCR_YSIZE/8);i++)
{
*pDisp++=WHITE;
}
return;
}
/***************************************************
显示指定缓冲区数据的函数
****************************************************/
void displaylcd(unsigned char *Buf)
{
unsigned int *pbuffer,temp_data;
int i;
pbuffer =(INT16U *)LCD_ACTIVE_BUFFER;
for(i = 0; i< (4800/4) ;i++)
{
temp_data = (Buf[i*4] << 24) + (Buf[i*4+1] << 16) + (Buf[i*4+2] << 8) +(Buf[i*4+3]);
pbuffer[i] = ~temp_data;
Delay(3);
}
}
/***************************************
//函数名 Lcd_Draw_HLine()
//功能 用指定颜色画水平线
//参数 usX0,usY0 起始坐标
// usX1 结束X坐标
// ucColor 线条颜色
// usWidth 线条宽度
//返回 无
/*******************************************
英文显示16x16
******************************************/
void dischar16(char hao,unsigned char line,unsigned char xdot)
{
unsigned char *pbuffer;
unsigned int i;
if(xdot%2==0)xdot+=1;
else xdot-=1;
//delay(1);
pbuffer =(unsigned char *) LCD_ACTIVE_BUFFER;
for (i=0;i<16;i++)
{
pbuffer[20*i+16*20*line+xdot*2]=hzdot[2*i+1+32*hao];
pbuffer[20*i+16*20*line+xdot*2+1]=hzdot[2*i+32*hao];
}
}
/*******************************************
英文字符串显示16x16
******************************************/
void disstr16( char * hao,unsigned char line,unsigned char xdot)
{
char * m=hao;
while(* m!=0)
{ if(*m=='\n'){line++;xdot=0;m++;}
if(xdot>=10){xdot-=10;line++;}
if(line>=15){line-=15;delay(3);Lcd_Active_Clr();}
dischar16(* m,line,xdot);
m++;
xdot++;
}
}
/*******************************************
中文字符串显示16x16
******************************************/
void disp16( char * hao,unsigned char line,unsigned char xdot)
{ unsigned char * pbuffer;
unsigned int i,x,y;
unsigned char xx;
// delay(1);
pbuffer =(unsigned char *) LCD_ACTIVE_BUFFER;
char * m=hao;
page[p]=m;
while(* m!=0)
{
if(*m=='\n'){line++;xdot=0;m++;}
if(xdot>=10){xdot-=10;line++;delay(1);}
if(line>=15){line-=15;page[(p+1)%100]=m;delay(1);
while(1){Test_Kb( );}
Lcd_Active_Clr();
}
if(*m<=0x20){m++;xdot++;continue;}
if(*m<=0xa0){dischar16(* m,line,xdot);m++;xdot++;continue;}
x=* (m);
y=* (m+1);
xx=xdot;
if(xdot%2==0)xx+=1;
else xx-=1;
for (i=0;i<16;i++)
{
pbuffer[20*i+16*20*line+xx*2]=hanzidot[2*i+1+((x-1-0xa0)*94+(y-0xa0-1))*32];
pbuffer[20*i+16*20*line+xx*2+1]=hanzidot[2*i+((x-1-0xa0)*94+(y-0xa0-1))*32];
}
m+=2;
xdot++;
}
}