📄 hanzi2.c
字号:
for (i=0; i < 2560; i++) ; // XTLVLD blanking interval (>1ms)
//while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
// source and enable missing clock
// detector
}
//------------------------------------------------------------------------------------
// Timer3_Init
//------------------------------------------------------------------------------------
//
// Configure Timer3 to auto-reload and generate an interrupt at interval
// specified by <counts> using SYSCLK/12 as its time base.
//
void Timer3_Init (int counts)
{
TMR3CN = 0x00; // Stop Timer3; Clear TF3;
// use SYSCLK/12 as timebase
TMR3RL = -counts; // Init reload values
TMR3 = 0xffff; // set to reload immediately
EIE2 |= 0x01; // enable Timer3 interrupts
TMR3CN |= 0x04; // start Timer3
}
void Timer3_ISR (void) interrupt 14
{
TMR3CN &= ~(0x80); // clear TF3
msnum++;
if(msnum==200)
{
msnum=0;
sec++;
}
if(sec>=60)
min++;
}
//------------------------------------------------------------------------------------------
//以下为液晶显示初始化控制
//---------------------------------------------------------------------------------------
void lcd_init(void) // initialize lcd
{
int i;
DSPE=0;
WP0=0;
WP1=0; //选择显示第0页
DP0=0;
DP1=0; //选择显示第0页
READY_=0;
CLEAR_=1;
for (i=0; i <1; i++) ;
CLEAR_=0; //置清空RAM模式
for (i=0; i <10; i++) ;
CLEAR_=1;
do {}
while(READY_==1); //等待清空响应
WP0=1;
WP1=0; //选择显示第0页
DP0=1;
DP1=0; //选择显示第0页
READY_=0;
CLEAR_=1;
for (i=0; i <1; i++) ;
CLEAR_=0; //置清空RAM模式
for (i=0; i <10; i++) ;
CLEAR_=1;
do {}
while(READY_==1); //等待清空响应
WP0=0;
WP1=1; //选择显示第0页
DP0=0;
DP1=1; //选择显示第0页
READY_=0;
CLEAR_=1;
for (i=0; i <1; i++) ;
CLEAR_=0; //置清空RAM模式
for (i=0; i <10; i++) ;
CLEAR_=1;
do {}
while(READY_==1); //等待清空响应
WP0=1;
WP1=1; //选择显示第0页
DP0=1;
DP1=1; //选择显示第0页
READY_=0;
CLEAR_=1;
for (i=0; i <1; i++) ;
CLEAR_=0; //置清空RAM模式
for (i=0; i <10; i++) ;
CLEAR_=1;
do {}
while(READY_==1); //等待清空响应
}
//---------------------------------------------------------------------------------//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
void display(void) // 动画显示
{
int i,j,time;
BRAD_=1; //置写数据模式
DSPE=1; //置显示允许
WP0=0; //选择写第0页
WP1=0; //选择写第0页
CLEAR_=0;
for(j=0;j<26;j++)
{
time=sec;
while(sec<=time+1);
clearlcd();
for(i=0;i<5;i++)
{
disword(16,8,-96+24+i*16+8*j,tab,i*32);
}
for(i=0;i<6;i++)
{
disword(16,6,-96+16+i*16+8*j,tab,i*32+32*5);
}
if(j<=16)
{
disword(16,3,96-8*j,tab2,0);
disword(16,3,112-8*j,tab2,32);
}
if(j>=6)
{
disword(16,3,96-8*(j-6),tab2,32*2);
disword(16,3,112-8*(j-6),tab2,32*3);
}
if(j>=12)
{
disword(16,3,96-8*(j-12),tab2,32*4);
disword(16,3,112-8*(j-12),tab2,32*5);
}
if(j>=18)
{
disword(16,3,96-8*(j-18),tab2,32*6);
disword(16,3,112-8*(j-18),tab2,32*7);
}
}
// for(i=0;i<10;i++)
// {
// disword(7,2,i*7,tab3,i*14);
// }
// for(i=0;i<6;i++)
// {
// disword(9,4,i*9,tab4,i*18);
// }
//disword(9,3,122,tab4,9*2*5);
DP0=0;
DP1=0; //选择显示第0页
}
//----------------------------------------------------------------
void display1(void) // initialize lcd
{
int i;
BRAD_=1; //置写数据模式
DSPE=1; //置显示允许
WP0=0; //选择写第0页
WP1=0; //选择写第0页
CLEAR_=0;
for(i=0;i<5;i++)
{
disword(16,8,24+i*16,tab,i*32);
}
for(i=0;i<6;i++)
{
disword(16,6,16+i*16,tab,i*32+32*5);
}
for(i=0;i<8;i++)
{
disword(16,3,i*16,tab2,i*32);
}
// for(i=0;i<10;i++)
// {
// disword(7,2,i*7,tab3,i*14);
// }
// for(i=0;i<6;i++)
// {
// disword(9,4,i*9,tab4,i*18);
// }
//disword(9,3,122,tab4,9*2*5);
DP0=0;
DP1=0; //选择显示第0页
}
//----------------------------------------------------------
////写数据函数
void writedata(uchar wdata,uchar a0_7,uchar a2_0) //write 写指令,注意时序
{
int i;
while(READY_);
//delay(2500);
WRITE_=1;
dataport=wdata;
highadress=a0_7;
ADR2=a2_0&0x04;
ADR1=a2_0&0x02;
ADR0=a2_0&0x01;
WRITE_=0;
for (i=0; i <1; i++) ;
WRITE_=1;
}
//----------------------------------------------------------
//---------------------------------------------------------
//----分辨率/wideth×16的字符(wideth*16)------------------
//wideth为字符宽度(0-128),highth为显示所处高度(1-8),每字符占两行,
//adress为起始地址0x00-0xff),纵向取膜,字节倒序
//displace为所显示字符在表中的偏移量,ttab[]为所在的表
//---------------------------------------------------------
void disword(int wideth,int highth,uchar adress,char ttab[],int displace) //wideth×highth的图形
{
int i;
p=ttab;
for(i=0;i<wideth;i++)
{
writedata(*(p+i+displace),adress+i,highth-1) ;
}
for(i=0;i<wideth;i++)
{
writedata(*(p+i+displace+wideth),adress+i,highth-2) ;
}
}
//----------------------------------------------------------
//-----------------------------------------------------
void clearlcd(void)
{ int i;
WP0=0;
WP1=0; //选择显示第0页
DP0=0;
DP1=0; //选择显示第0页
READY_=0;
CLEAR_=1;
for (i=0; i <1; i++) ;
CLEAR_=0; //置清空RAM模式
for (i=0; i <10; i++) ;
CLEAR_=1;
do {}
while(READY_==1); //等待清空响应
}
//----------------------------------------------------------
//-----------------------------------------------------
void delay(int dtime)
{while(dtime--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -