王朝网络
分享
 
 
 

嵌入式读书器,c编写

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

/****************************************************************************

** 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++;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有