📄 mainc.c
字号:
/************************************************************
************************************************************/
#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 + -