📄 wang.c
字号:
#include"bit.h"
#include"lcd1.h"
#include"SPCE061A.h"
#include"sp.h"
//#define Fosc_CLK_RATE C_Fosc_24M //select Fosc
//#define CPU_CLK_RATE C_Fosc_Div_2 //select CPUClk
/*------------------检查忙位-----------------------------*/
/*void chk_busy()
{
*P_IOA_Dir = 0xFFFF;
*P_IOA_Attrib = 0xFFFF;
*P_IOA_Data = 0x0000;
RS=0;
RW=1;
E=1;
P0_Lowbyte=0xff;
E=0;
*P_IOA_Dir = 0x0000;
*P_IOA_Attrib = 0x0000;
*P_IOA_Data = 0x0000;
while((P0_Lowbyte&0x80)==0x80)
{
*P_Watchdog_Clear=0x0001;
}
}*/
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
{
*P_Watchdog_Clear=0x0001;
}
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
/*chk_busy();
*P_IOA_Dir = 0xFFFF;
*P_IOA_Attrib = 0xFFFF;
*P_IOA_Data = 0x0000; */
RS=0;
RW=0;
E=1;
P0_Lowbyte=cmdcode;
delay(5); //在数据写入的时候加入适当的延时
E=0;
delay(5);
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
/*chk_busy();
*P_IOA_Dir = 0xFFFF;
*P_IOA_Attrib = 0xFFFF;
*P_IOA_Data = 0x0000; */
RS=1;
RW=0;
E=1;
P0_Lowbyte=Dispdata;
delay(5); //在数据写入的时候加入适当的延时
E=0;
delay(5);
}
/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{
delay(2000);
write_com(0x30); //选择基本指令集,选择8bit数据流
delay(10);
write_com(0x0c); //开显示(无游标、不反白)
delay(10);
write_com(0x01); //清除显示,并且设定地址指针为00H
delay(500);
write_com(0x02); /*DDRAM地址归位*/
delay(500);
write_com(0x80); //设置DDRAM地址
delay(10);
write_com(0x10); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
delay(0);
}
/*------------------自定义一个字符代码(ball)--------------------------*/
void CGRAM()
{
int i;
write_com(0x30);
write_com(0x40); //设定CGRAM地址
for(i=0;i<16;i++)
{
write_data(ball[i*2]);
write_data(ball[i*2+1]);
*P_Watchdog_Clear=0x0001;
}
}
/*------------------显示字符串--------------------------*/
void hzkdis(const unsigned char *s)
{
while(*s>0)
{ write_data(*s);
s++;
delay(50);
*P_Watchdog_Clear=0x0001;
}
}
/*------------------首屏显示--------------------------*/
void ceshi()
{
write_com(0x01);//清除显示,并且设定地址指针为00H
delay(5);
write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
hzkdis("单工无线呼叫系统");
write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
hzkdis("YM12864R点阵液晶");
write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
hzkdis("作者");
write_com(0x8a);
write_data(0x3a);
write_com(0x8b);
hzkdis("王晓娣");
write_com(0x9A);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
hzkdis("陈国良");
write_com(0x9e);
hzkdis("张健");
}
/*------------------显示图片------------------------*/
void Disp_Img(const unsigned char *img)
{
unsigned int j=0;
unsigned char x,y,i;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++) /*上下两个半屏对接显示*/
for(x=0;x<8;x++)
{
write_com(0x36);//功能设置---8BIT控制界面,扩充指令集
write_com(y+0x80); //行地址
write_com(x+0x80+i); //列地址
write_com(0x30);
write_data(img[j++]);
write_data(img[j++]);
*P_Watchdog_Clear=0x0001;
}
}
/*------------------显示图片------------------------*/
void Disp_Img1(const unsigned char *img1)
{
unsigned int j1=0;
unsigned char x1,y1,i1;
for(i1=0;i1<9;i1+=8)
for(y1=0;y1<32;y1++) /*上下两个半屏对接显示*/
for(x1=0;x1<4;x1++)
{
write_com(0x36);//功能设置---8BIT控制界面,扩充指令集
write_com(y1+0x80); //行地址
write_com(x1+0x80+i1); //列地址
write_com(0x30);
write_data(img1[j1++]);
write_data(img1[j1++]);
*P_Watchdog_Clear=0x0001;
}
}
/*------------------清整个GDRAM空间----------------------------*/
void clrgdram()
{
unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{
write_com(0x34);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x00);
*P_Watchdog_Clear=0x0001;
}
}
/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/
void lcdfill(const unsigned char disdata)
{
unsigned char x,y;
for(y=0;y<32;y++)
for(x=0;x<16;x++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(disdata);
write_data(disdata);
*P_Watchdog_Clear=0x0001;
}
write_com(0x34);
write_com(0x36);
}
/*------------------清屏命令--------------------------*/
void clrscreen()
{
write_com(0x01);
delay(10);
}
/*------------------诗--------------------------*/
void gushi_display()
{
write_com(0x30);
clrscreen();
write_com(0x80+FIRST_ADDR);
hzkdis("1 2 3 4 5 ,");
write_com(0x90+FIRST_ADDR);
hzkdis("上山打老虎。");
write_com(0x88+FIRST_ADDR);
hzkdis("老虎没打着,");
write_com(0x98+FIRST_ADDR);
hzkdis("打着小松鼠。");
write_com(0xb2+FIRST_ADDR);
hzkdis("蓝水天下");
write_com(0xa9+FIRST_ADDR);
hzkdis("我的自由空间");
}
int main()
{
unsigned char i,j;
/*unsigned int Fosc_CLK,CPU_CLK;
Fosc_CLK = Fosc_CLK_RATE;
CPU_CLK = CPU_CLK_RATE;
*P_SystemClock = Fosc_CLK|CPU_CLK; */
*P_IOA_Dir = 0xFFFF;
*P_IOA_Attrib = 0xFFFF;
*P_IOA_Data = 0x0000;
PSB=1;
RES=0;
delay(100);
RES=1;
while(1)
{
*P_Watchdog_Clear=0x0001;
RW=0;
lcdreset(); //初始化LCD屏
CGRAM();
ceshi(); //显示测试字样
delay(10000);
clrgdram();
clrscreen(); //清屏
Disp_Img(phone); //调入一幅图画
for(i=0;i<5;i++)
{
write_com(0x92);
hzkdis("))))");
delay(1700);
write_com(0x92);
hzkdis(" ");
delay(90);
*P_Watchdog_Clear=0x0001;
}
Disp_Img(phonejian); //调入一幅图画
write_com(0x82);
hzkdis("已接通");
delay(10000);
write_com(0x82);
hzkdis(" ");
lcdfill(0xff); //显示全开
delay(20000);
gushi_display(); //显示诗
clrgdram();
clrscreen(); //清屏
write_com(0x87); //调用自定义的CGRAM的代码
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen();
write_com(0x96);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x8d);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x9c);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x8b);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x92);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x81);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x90);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x89);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x9a);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x8b);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x94);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x85);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x96);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x8f);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x9e);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x8d);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x94);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x83);
write_data(0x00);
write_data(0x00);
delay(5000);
clrscreen(); //清屏
write_com(0x92);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x89);
write_data(0x00);
write_data(0x00);
delay(20000);
clrscreen(); //清屏
write_com(0x98);
write_data(0x00);
write_data(0x00);
delay(5000);
gushi_display();
delay(6000);
for(j=0;j<8;j++) //字符循环左移
{
write_com(0x18);
delay(20000);
*P_Watchdog_Clear=0x0001;
}
clrgdram();
clrscreen(); //清屏
Disp_Img1(pig); //调入一幅图画
delay(20000);
clrgdram();
clrscreen(); //清屏
gushi_display();
delay(6000);
write_com(0x36);
write_com(0x04); //第一行反白显示
delay(20000);
write_com(0x04); //第一行恢复正常
delay(20000);
write_com(0x05); //第二行反白显示
delay(20000);
write_com(0x05); //第二行恢复正常
delay(20000);
write_com(0x03); //垂直滚动屏幕的内容
write_com(0x60);
delay(20000);
*P_Watchdog_Clear=0x0001;
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -