📄 hello.c
字号:
for(j = 0;j < 2;j ++){
for( i =0 ; i < width ; i++,col++)
WrData(&row,&col,0x00); //先清一页
row = row + 1; //该页清完 页加1
col = k ; //从起始列开始
}
}
/******************************************************
函数名称:lcd_clear_line
函数功能:清屏,清行
传入参数:start,lines
返 回 值:无
建立时间:2006.04.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:start -- 起始行(0~3) lines -- 行数(0~3)
******************************************************/
void lcd_clear_line(INT8U start,INT8U lines)
{
INT8U i;
for(i = 0; i < lines ; i++,start++)
ClrScreen0(start,0,192);
}
/******************************************************
函数名称:ClrScreenBlack
函数功能:清屏,全屏幕黑
传入参数:无
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void ClrScreenBlack(void)
{
INT8U row,col;
for(row = 0; row < 8; row++)
for(col = 0; col < LCMLIMIT; col++)
WrData(&row,&col,0xFF);
}
/******************************************************
函数名称:ClrScreenBlack0
函数功能:黑屏,具体清
传入参数:row,col,width
返 回 值:无
建立时间:2006.04.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:row -- 行(0~3) col -- 起始列(0~192) width --清屏的宽度(0~192)
******************************************************/
void ClrScreenBlack0(INT8U row,INT8U col,INT8U width)
{
INT8U i,j,k;
k = col ;
row = 2*row;
for(j = 0;j < 2;j ++){
for( i =0 ; i < width ; i++,col++)
WrData(&row,&col,0xFF);
row = row + 1;
col = k ;
}
}
/******************************************************
函数名称:LcmInit
函数功能:LCM初始化
传入参数:无
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void LcmInit(void)
{
INT8U cbyte;
cbyte = DISPOFF; //关闭显示屏
WrCmdL(cbyte);
WrCmdM(cbyte);
WrCmdR(cbyte);
cbyte = DISPON; //打开显示屏
WrCmdL(cbyte);
WrCmdM(cbyte);
WrCmdR(cbyte);
cbyte = DISPFIRST; //定义显示起始行为零
WrCmdL(cbyte);
WrCmdM(cbyte);
WrCmdR(cbyte);
lcd_clear();
}
/******************************************************
函数名称:GetChineseCharactrMode
函数功能:取汉字字模
传入参数:ChineseCharacter,hzmode_buf
返 回 值:无
建立时间:2006.0.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:ChineseCharacter -- 汉字 hzmode_buf -- 存字模信息
******************************************************/
GetChineseCharactrMode(INT8U ChineseCharacter,INT8U hzmode_buf[16])
{
INT16U offset,i;
offset = ChineseCharacter*16;
for(i = 0 ; i < 16 ; i ++){
hzmode_buf[i] = ASCII_dis[offset + i];
}
}
/******************************************************
函数名称:ArkLcmDisp
函数功能:显示汉字及字符
传入参数:row,col,strhz
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void ArkLcmDisp(INT8U row,INT8U col,PINT8U strhz)
{
INT8U i;
INT8U hzmode_buf[32];
while(*strhz!=NULL){
if(*strhz & 0x80){
GetHzMode(strhz, 32,hzmode_buf);
PuteDot(&row,&col,hzmode_buf,16);
strhz+=2;
} else {
//read_char_lib((int)((*strhz)*16),16,2,hzmode_buf);
GetChineseCharactrMode(*strhz,hzmode_buf);
PuteDot(&row,&col,hzmode_buf,8);
strhz++;
}
}
//DebugPrint("完成正向显示的第 %d 行!!!\n",row/2);
}
/******************************************************
函数名称:ArkLcmDispCtr
函数功能:显示汉字及字符
传入参数:row,col,strhz
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void ArkLcmDispCtr(INT8U row,INT8U col,PINT8U strhz)
{
INT8U hzmode_buf[32];
while(*strhz!=NULL){
if(*strhz & 0x80){
GetHzMode(strhz, 32,hzmode_buf);
PuteDotCtr(&row,&col,hzmode_buf,16);
strhz+=2;
} else {
//read_char_lib((int)((*strhz)*16),16,2,hzmode_buf);
GetChineseCharactrMode(*strhz,hzmode_buf);
PuteDotCtr(&row,&col,hzmode_buf,8);
strhz++;
}
}
//DebugPrint("完成反向显示的第 %d 行!!!\n",row/2);
}
/******************************************************
函数名称:PuteDot
函数功能:字符点阵码数据输出
传入参数:row,col,hzaddr,width
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void PuteDot(PINT8U row,PINT8U col,PINT8U hzaddr,INT8U width)
{
INT8U i;
INT8U dbyte;
INT8U ix,iy;
ix = *row; //暂存行列坐标,以备下半个字符使用
iy = *col;
for(i=0;i<width;i++){
dbyte = *hzaddr;
WrData(row,col,dbyte);
hzaddr++;
(*col)++;
if(*col == LCMLIMIT){
*col = 0;
*row += 2;
}
if(*row > 7)
*row = 0;
}
*row = ix+1;
*col = iy;
for(i=0;i<width;i++){
dbyte = *hzaddr;
WrData(row,col,dbyte);
hzaddr++;
(*col)++;
if(*col == LCMLIMIT){
*col = 0;
*row += 2;
}
if(*row > 7)
*row = 1;
}
*row = ix;
}
/******************************************************
函数名称:PuteDotCtr
函数功能:字符点阵码数据反显输出
传入参数:row,col,hzaddr,width
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void PuteDotCtr(PINT8U row,PINT8U col,PINT8U hzaddr,INT8U width)
{
INT8U i;
INT8U dbyte;
INT8U ix,iy;
ix = *row; //暂存行列坐标,以备下半个字符使用
iy = *col;
for(i=0;i<width;i++){
dbyte = ~(*hzaddr);
WrData(row,col,dbyte);
hzaddr++;
(*col)++;
if(*col == LCMLIMIT){
*col = 0;
*row += 2;
}
if(*row > 7)
*row = 0;
}
*row = ix+1;
*col = iy;
for(i=0;i<width;i++){
dbyte = ~(*hzaddr);
WrData(row,col,dbyte);
hzaddr++;
(*col)++;
if(*col == LCMLIMIT){
*col = 0;
*row += 2;
}
if(*row > 7)
*row = 1;
}
*row = ix;
}
/******************************************************
函数名称:GetHzMode
函数功能:取汉字点阵字模
传入参数:pTmpStr,hz_size,pTmpData
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:通过read_char_lib()从FLASH中读取
******************************************************/
void GetHzMode( PINT8U pTmpStr, INT8U hz_size,PINT8U pTmpData )
{
INT8U qhz,whz,i;
INT32U offset;
qhz=pTmpStr[0]-0xA0;
whz=pTmpStr[1]-0xA0;
offset=(94*(qhz-1)+(whz-1))*hz_size;
//read_char_lib(offset,32,1,pTmpData);
for(i = 0 ; i < 32 ; i++)
pTmpData[i] = mhzk16_dis[offset + i];
}
/*********************************************************
函数名称:lcd_disp
函数功能:LCD显示
传入参数:row ,col, mode, buf
返 回 值:无
创建时间:2006.04.12
修改时间:
创 建 人:satellite
修 改 人:
其它说明:row-->显示的行(0~3) col-->开始显示的列(0~192) mode-->显示的模式 0-正显 其它-反显 buf-->显示的内容
**********************************************************/
void lcd_disp(INT8U row,INT8U col,INT8U mode,INT8U *buf)
{
if(mode==0) ArkLcmDisp(2*row,col,buf);
else ArkLcmDispCtr(2*row,col,buf);
}
/******************************************************
函数名称:lcd_init
函数功能:初始化LCD
传入参数:无
返 回 值:无
建立时间:2006.0.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:
******************************************************/
void lcd_init(void)
{
printf("start to initial gpio [15:0] \r\n");
LcdPortInit();
printf("start to initial LCM \r\n");
LcmInit();
printf("initialization is completed \r\n");
}
INT8U num0[] = "0";
INT8U num1[] = "1";
INT8U num2[] = "2";
INT8U num3[] = "3";
INT8U num4[] = "4";
INT8U num5[] = "5";
INT8U num6[] = "6";
INT8U num7[] = "7";
INT8U num8[] = "8";
INT8U num9[] = "9";
INT8U year[] = "年";
INT8U month[] = "月";
INT8U date[] = "日";
INT8U dayofweek[] = "星期";
INT8U maohao[] = ":";
unsigned char *cnum(unsigned char num)
{
unsigned char *p;
switch(num)
{
case 0:p=num0;
break;
case 1:p=num1;
break;
case 2:p=num2;
break;
case 3:p=num3;
break;
case 4:p=num4;
break;
case 5:p=num5;
break;
case 6:p=num6;
break;
case 7:p=num7;
break;
case 8:p=num8;
break;
case 9:p=num9;
break;
default: break;
}
return p;
}
/*********************************************************************************
/ 输出 年
/************************************************************************/
void coutyear(void)
{
unsigned char year[5];
unsigned short tmp;
tmp = RTC_READ(RTCYEAR);
year[4] = (tmp & 0xF000)>>12;
year[3] = (tmp & 0xF00)>>8;
year[2] = (tmp & 0xF0)>>4;
year[1] = (tmp & 0xF);
lcd_disp(0,16,0,cnum(year[4]));
lcd_disp(0,32,0,cnum(year[3]));
lcd_disp(0,48,0,cnum(year[2]));
lcd_disp(0,64,0,cnum(year[1]));
// lcd_disp(0,80,0,year);
}
/***********************************************************************************
/ 输出 月
/****************************************************************************/
void coutmonth(void)
{
unsigned char month[3];
unsigned short tmp;
tmp = RTC_READ(RTCMON);
month[2] = (tmp & 0x10)>>4;
month[1] = (tmp & 0xF);
lcd_disp(0,96,0,cnum(month[2]));
lcd_disp(0,112,0,cnum(month[1]));
}
/**************************************************************************************
/ 输出 日
/************************************************************************************/
void coutdate(void)
{
unsigned char date[3];
unsigned short tmp;
tmp = RTC_READ(RTCDATE);
date[2] = (tmp & 0x30)>>4;
date[1] = (tmp & 0xF);
lcd_disp(0,144,0,cnum(date[2]));
lcd_disp(0,160,0,cnum(date[1]));
}
/**************************************************************************************
/ 输出 星期
/*************************************************************************************/
void coutdayofweek(void)
{
unsigned char dayofweek[2];
unsigned short tmp;
tmp = RTC_READ(RTCDAY);
dayofweek[1] = (tmp & 0x7);
lcd_disp(1,128,0,cnum(dayofweek[1]));
}
/************************************************************************************
/ 输出 小时
/************************************************************************************/
void couthour(void)
{
unsigned char hour[3];
unsigned short tmp;
tmp = RTC_READ(RTCHOUR);
hour[2] = (tmp & 0x30)>>4;
hour[1] = (tmp & 0xF);
lcd_disp(3,32,0,cnum(hour[2]));
lcd_disp(3,48,0,cnum(hour[1]));
}
/**********************************************************************************
/ 输出 分钟
/**********************************************************************************/
void coutmin(void)
{
unsigned char min[3];
unsigned short tmp;
tmp = RTC_READ(RTCMIN);
min[2] = (tmp & 0x70)>>4;
min[1] = (tmp & 0xF);
lcd_disp(3,80,0,cnum(min[2]));
lcd_disp(3,96,0,cnum(min[1]));
}
/***********************************************************************************
/ 输出 秒
/***********************************************************************************/
void coutsec(void)
{
unsigned char sec[3];
unsigned short tmp;
tmp = RTC_READ(RTCSEC);
sec[2] = (tmp & 0x70)>>4;
sec[1] = (tmp & 0xF);
lcd_disp(3,128,0,cnum(sec[2]));
lcd_disp(3,144,0,cnum(sec[1]));
}
void main()
{
int i;
struct SYSTEMTIME *time1,*time2;
// struct SYSTEMTIME realtime;
struct SYSTEMTIME settime = {2008,4,4,10,14,8,0};
lcd_init();
// time1 = &realtime;
time2 = &settime;
SetTime(time2);
while(1)
{
coutyear();
lcd_disp(0,80,0,year);
coutmonth();
lcd_disp(0,128,0,month);
coutdate();
lcd_disp(0,176,0,date);
lcd_disp(1,80,0,dayofweek);
coutdayofweek();
couthour();
lcd_disp(3,64,0,maohao);
coutmin();
lcd_disp(3,112,0,maohao);
coutsec();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -