⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainc.c

📁 这个是我写的以t6963为主控芯片的显示屏的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/************************************************************

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

#include "reg31.h"
#include "string.h"
#include "math.h"
#include "hzk16x16.h"
#include "ctype.h" 
#include "stdio.h"
#include "stdlib.h"
#include "t6963libcon.h"



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

                     数据类型定义 

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

#define  uchar  unsigned char 
#define  uint   unsigned int 


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

                    引线定义

*************************************************************/
#define ReadLine    P12
#define WriteLine   P13
#define CDLine      P10
#define DataPort    P3





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

                     预编译定义 

************************************************************/ 
/*#define   #ENDIf   
#define   #ENDFor   
#define   #ENDWhile   
#define   #ReturnBack   

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

                     函数定义 

************************************************************/ 
void InitLCD();                                                        // 初始化显示屏
void ClearScreen(uint ram);                                            // 清屏
void CursorPosSet(unsigned char x,unsigned char y);                    // 设置光标位置
void CursorUp();                                                       // 光标向上移动一格
void CursorDown();                                                     // 光标向下移动一格
void CursorRight();                                                    // 光标向右移动一格
void CursorLeft();                                                     // 光标向左移动一格
void CursorEnter();                                                    // 光标换行
void WriteCmd1(uchar cmd);                                             // 写指令不带参数
void WriteCmd2(uchar dat1,uchar cmd);                                  // 写指令带一个参数
void WriteCmd3(uchar dat1,uchar dat2,uchar cmd);                       // 写指令带两个参数
void WriteData(uchar dat);                                             // 写一个数据
uchar ReadCmd();                                                       // 读数据
uchar ReadState();                                                     // 读当前状态
void RWcheck();                                                        // 读写忙检查
void AutoRcheck();                                                     // 自动读检查
void AutoWcheck();                                                     // 自动写检查
void AutoWchar(char *StringP);                                         // 自动写字符串

void PutPixel(uchar PointX,uchar PointY, bit Mode);                    // 画点
void DrawLine( uchar x1, uchar y1, uchar x2, uchar y2, bit Mode);      // 画线,采用数学计算方式
void DrawBox(uchar X1, uchar Y1, uchar X2, uchar Y2, bit SetReset);    // 画矩形
void ShowPicture(uchar Startline,uchar Startcolumn,uchar LineWidth,uchar ColumnWidth,uchar *PicturePoint);// 画图
void ShowHZ16x16(uchar column,uchar lin,uint hzcode);                  // 显示16x16的汉字
void Show16x16Chars(uchar column,uchar lin,uint hzcode,uint num);      // 显示一行汉字
void ReverseShowChar(uchar column,uchar lin);                          // 反显一个字符
void ReverseShowHZ(uchar column,uchar lin);                            // 反显一个汉字
void ReverseShowChars(uchar column,uchar lin,uchar num);               // 反显一串字符

void Lines(uchar Xa,uchar Ya,uchar Xb,uchar Yb);                       // 第二中画线方式,采用增量方式代码较短
void delay(int d_time);
unsigned char GetKey();
#define WriteSingle() WriteLine=0;WriteLine=1;                  // 读信号



unsigned char MainMenu();
void LoadScreen(uchar i);
void LoadPassScreen();

/*********************************************************** 
        以8*8字符计算,显示屏横向、纵向可以显示的字符个数 
                       以128*64为例: 
************************************************************/ 
#define LineChar 16                     //一行16个字符(8*8) 
#define ColumnChar 8                   //总共8列 
unsigned char Cursor_X,Cursor_Y;       //光标的坐标 
uchar CtrlData=0; 




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

                    设置液晶显示器数据地址和指令地址 

********************************************************************************/ 
#define GraphAddrL         0x00           // 图形首地址低8位 
#define GraphAddrH         0x02           // 图形首地址高8位 
#define GraphicStartAddr   0x0200         // 图形首地址 
#define TextAddrL          0x00           // 文本首地址低8位 
#define TextAddrH          0x00           // 文本首地址高8位 
#define TextStartAddr      0x00           // 文本首地址 
 

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

                      指令代码定义 

************************************************************/ 
#define  CursorPointer   0x21         // 光标地址设置 
#define  OffsetReg       0x22         // CGRAM偏移地址设置 
#define  AddrSet         0x24         // 显示地址设置 
#define  TextHomeAddr    0x40         // 文本首地址 
#define  TextArea        0x41         // 文本宽度设置 
#define  GraHomeAddr     0x42         // 图形首地址设置 
#define  GraArea         0x43         // 图形宽度设置 
#define  OrMode          0x80         // 或模式显示 
#define  ExorMode        0x81         // 异或模式显示 
#define  AndMode         0x83         // 与模式显示 
#define  TextAttMode     0x84         // 文本属性模式 
#define  InterCGROM      0            // 内部CGROM 
#define  ExCGRAM         0x08         // 外部CGRAM 
#define  DisplayOff      0x90         // 显示关闭 
#define  CursorOn        0x92         // 光标显示,但不闪烁 
#define  CursorBlink     0x93         // 光标闪烁 
#define  TextOn          0x94         // 文本模式打开 
#define  GraOn           0x98         // 图形模式打开 
#define  TGAllOn         0x9c         // 文本图形模式都打开 
#define  Cursor1         0xa0         // 光标形状一行显示 
#define  Cursor2         0xa1         // 光标形状二行显示 
#define  Cursor3         0xa2         // 光标形状三行显示 
#define  Cursor4         0xa3         // 光标形状四行显示 
#define  Cursor5         0xa4         // 光标形状五行显示 
#define  Cursor6         0xa5         // 光标形状六行显示 
#define  Cursor7         0xa6         // 光标形状七行显示 
#define  Cursor8         0xa7         // 光标形状八行显示 
#define  DataAutoWrite   0xb0         // 数据自动写 
#define  DataAutoRead    0xb1         // 数据自动读 
#define  ExitAutoRW      0xb2         // 退出数据自动读写模式 
#define  DataWAddrI      0xc0         // 数据写,地址加1 
#define  DataWAddrD      0xc2         // 数据写,地址减1 
#define  DataWAddrNV     0xc4         // 数据写,地址不变 
#define  DataRAddrI      0xc1         // 数据读,地址加1 
#define  DataRAddrD      0xc3         // 数据读,地址减1 
#define  DataRAddrNV     0xc5         // 数据读,地址不变 
#define  ScreenPeek      0xe0         // 屏读 
#define  ScreenCopy      0xe1         // 屏拷贝 


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

                      主程序的开始

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


main()
{
	uchar temp;
	InitLCD();         // 初始化显示模块

	LoadPassScreen();
	GetKey();
do{
	temp=MainMenu();
	ClearScreen(0x2000);
	WriteCmd3(0x00,0x00,AddrSet);
	switch(temp){
		case 0:	WriteCmd2(0x10,DataWAddrI);break;
		case 1:	WriteCmd2(0x11,DataWAddrI);break;
		case 2:	WriteCmd2(0x12,DataWAddrI);break;
		case 3:	WriteCmd2(0x13,DataWAddrI);break;
		case 4:	WriteCmd2(0x14,DataWAddrI);break;
		case 5:	WriteCmd2(0x15,DataWAddrI);break;
		case 6:	WriteCmd2(0x16,DataWAddrI);break;
		case 7:	WriteCmd2(0x17,DataWAddrI);break;
		case 8:	WriteCmd2(0x18,DataWAddrI);break;
		case 9:	WriteCmd2(0x19,DataWAddrI);break;
		case 10:WriteCmd2(0x11,DataWAddrI);WriteCmd2(0x10,DataWAddrI);break;
		case 11:WriteCmd2(0x10,DataWAddrI);WriteCmd2(0x11,DataWAddrI);break;
	}
	GetKey();
	}while(1);

	here:goto here;
}

void delay(int d_time)
{
    int i=d_time;
	int j;
	for(j=0;j<13;j++)
	    {
		    while(d_time--);
			d_time=i;
		}
}

uchar GetKey()
{
	uchar temp;
	P11=1;
	P16=1;
	P17=1;

	do{
		temp=P1;
		temp &=0xc2;
		delay(2);
	}while(temp==0xc2);
	delay(10);
	switch(temp){
		case 0x42:return 1;
		case 0x82:return 2;
		case 0xc0:return 3;
	}
}



/******************************************************************************** 
函数名:unsigned char MainMenu()
函数功能:实现主菜单
          函数返回值:各菜单代码
********************************************************************************/
unsigned char MainMenu()
{
	uchar i=0;
    LoadScreen(0);
	ReverseShowChars(0,0,16);

	do{
	    switch(GetKey()){
			case 1:
				ReverseShowChars( 0,(i%4)*16,16 );
				i++;
				if(i>10)i=10;
				LoadScreen(i);
				ReverseShowChars( 0,(i%4)*16,16 );
				break;
			case 2:
				ReverseShowChars( 0,(i%4)*16,16 );
				i--;
				if(i==0xff)i=0;
				LoadScreen(i);
				ReverseShowChars( 0,(i%4)*16,16 );
				break;
		   case 3:
		   		return i;
		}
		
	}while(1);

}


#if AutoWcharEnable          // 是否允许自动写
/******************************************************************************** 
函数名: Void AutoWchar(char *StringP)
函数功能: 自动写一组字符,要写入的字符串的指针在StringP中,使用内部CGROM
********************************************************************************/ 
void AutoWchar(char *StringP)
{
    int StringLen;
	int i;
	StringLen=strlen(StringP);
	AutoWcheck();
	WriteCmd1(DataAutoWrite);              //自动写设置
	for(i=0;i<StringLen;i++)
	    WriteData(*(StringP+i));
	WriteCmd1(ExitAutoRW);
}
#endif                     // 是否允许自动写结束

void LoadPassScreen()
{
	Show16x16Chars(1,0,0x00,5);
	ShowHZ16x16(11,0,0x2e);
}
void LoadScreen(unsigned char i)
{
    switch(i){
		case 0:
		case 1:
		case 2:
		case 3:
			ShowHZ16x16(1,0,0x23);           // 1.发新卡
			ShowHZ16x16(3,0,0x2d);
			ShowHZ16x16(5,0,0x05);
			ShowHZ16x16(7,0,0x06);
			ShowHZ16x16(9,0,0x07);
			ShowHZ16x16(11,0,0x32);


			ShowHZ16x16(1,16,0x24);          // 2.售电
			ShowHZ16x16(3,16,0x2d);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -