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

📄 lcd.c

📁 智能计时计数器 有计两脉冲间隔时间、几脉冲间隔时间、30秒脉冲数等
💻 C
📖 第 1 页 / 共 2 页
字号:

#include <.\zm.h>
#include <reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define asscii 46 //how many one byte
#define null 44//NULL
#define cheng 46 //成
#define du1 47//都
#define si 48//世
#define ji1 49//纪
#define zhong1 50//中
#define ke 51//科
#define ping 52//平
#define jun 53//均
#define su 54//速
#define du2 55//度
#define jia 56//加
#define guang 57//光
#define dian 58//电
#define men 59//门
#define zi 60//自
#define jian 61//检
#define dan 62//单
#define shuang 63//双
#define bai 64//摆
#define zhou 65//周
#define qi1 66//期
#define zhong2 67//钟
#define pen 68//碰
#define zhuang 69//撞
#define jiao 70//角
#define zhuan 71//转
#define xian 72//线
#define miao 73//秒
#define fen 74//分
#define shou 75//手
#define dong 76//动
#define ce 77//测
#define liang 78//量
#define zhi 79//智
#define neng 80//能
#define ji2 81//计
#define shu 82//数
#define shi 83//时
#define qi2 84//器
#define tong 85//通
#define dao 86//道
#define gao 87//高
#define di 88 //低
#define duo 89
#define mai 90
#define chong 91
#define ci 92
//code char ZM[];
extern select_id;
extern void PR0(char COM);
extern void PR1(char DAT);
extern void PR3(char COM);
extern void PR4(char DAT);
void char_byte(unsigned char lin,unsigned char byte,unsigned char linehead )
{
unsigned char i;
unsigned char k;
unsigned int addr_ziku;
i=byte*8;
if(i<=53)//left
	{
	PR0(i);
	PR0(0xb8|lin);
	for(k=0;k<8;k++)
		{
		addr_ziku=linehead*16+k;
		PR1(ZM[addr_ziku]);
		}
	PR0(i);
	PR0(0xb8|(lin+1));
	for(k=0;k<8;k++)
		{addr_ziku=linehead*16+k+8;
		PR1(ZM[addr_ziku]);
		}
	}
else if(i>=61)//right
	{
	PR3(i%61);
	PR3(0xb8|lin);
	for(k=0;k<8;k++)
		{addr_ziku=linehead*16+k;
		PR4(ZM[addr_ziku]);
		}
	PR3(i%61);
	PR3(0xb8|(lin+1));
	for(k=0;k<8;k++)
		{addr_ziku=linehead*16+k+8;
		PR4(ZM[addr_ziku]);
		}
	}
else         //mid
	{
	PR0(i);
	PR0(0xb8|lin);
	for(k=0;k<(61-i);k++)
		{addr_ziku=linehead*16+k;
		PR1(ZM[addr_ziku]);
		}
	PR3(0);
	PR3(0xb8|lin);
	for(k=0;k<(i+8-61);k++)
		{addr_ziku=linehead*16+k+61-i;
		PR4(ZM[addr_ziku]);
		}
	PR0(i);
	PR0(0xb8|(lin+1));
	for(k=0;k<(61-i);k++)
		{addr_ziku=linehead*16+k+8;
		PR1(ZM[addr_ziku]);
		}
	PR3(0);
	PR3(0xb8|(lin+1));
	for(k=0;k<(i+8-61);k++)
		{addr_ziku=linehead*16+8+k+61-i;
		PR4(ZM[addr_ziku]);
		}
	}
}


void line_lcd(unsigned char lin,unsigned char linehead[])
{
unsigned char i=0;
unsigned char j=0;
unsigned char k=0;
unsigned int addr_ziku;
while(linehead[i]!=0xff)
	{
	if(linehead[i]>=asscii)//判断是汉字还是字符
		j+=16;
	else j+=8;

	if((j<69)&&(j>61)&&(linehead[i]<asscii))//字符从56列开始,左屏有5列,右屏有3列
		{
		PR0(j-8);
		PR0(0xb8|lin);
		for(k=0;k<(8-j+61);k++)
			{
                        addr_ziku=linehead[i]*16+k;
			PR1(ZM[addr_ziku]);}
		PR3(0);
		PR3(0xb8|lin);
		for(k=0;k<=(j-61);k++)
			{addr_ziku=linehead[i]*16+k-j+69;
			PR4(ZM[addr_ziku]);}

		PR0(j-8);
		PR0(0xb8|(lin+1));
		for(k=0;k<(69-j);k++)
			{addr_ziku=linehead[i]*16+k+8;
			PR1(ZM[addr_ziku]);}
		PR3(0);
		PR3(0xb8|(lin+1));
		for(k=0;k<=(j-61);k++)
			{addr_ziku=linehead[i]*16+k+77-j;
			PR4(ZM[addr_ziku]);}
		}
	else if((j<77)&&(j>61)&&(linehead[i]>=asscii))//汉字从56列或48列开始,左屏有5列,右屏有11列或左屏有13列,右屏有5列
		{
		PR0(j-16);
		PR0(0xb8|lin);
		for(k=0;k<(77-j);k++)
			{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
			PR1(ZM[addr_ziku]);}
		PR3(0);
		PR3(0xb8|lin);
		for(k=0;k<=(j-61);k++)
			{addr_ziku=(linehead[i]-asscii)*32+asscii*16+16-(j-61)+k;
			PR4(ZM[addr_ziku]);}

		PR0(j-16);
		PR0(0xb8|(lin+1));
		for(k=0;k<(61-(j-16));k++)
			{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
			PR1(ZM[addr_ziku]);}
		PR3(0);
		PR3(0xb8|(lin+1));
		for(k=0;k<(j-61);k++)
			{addr_ziku=(linehead[i]-asscii)*32+asscii*16+16+16-(j-61)+k;
			PR4(ZM[addr_ziku]);}
		}
	else
		{
		if(linehead[i]<asscii)//8*16
			{
			if(j<61)//左屏字符
				{
				PR0(j-8);
				PR0(0xb8|lin);
				for(k=0;k<8;k++)
					{addr_ziku=linehead[i]*16+k;
					PR1(ZM[addr_ziku]);}
				PR0(j-8);
				PR0(0xb8|(lin+1));
				for(k=0;k<8;k++)
					{addr_ziku=linehead[i]*16+k+8;
					PR1(ZM[addr_ziku]);}
				}
			else
				{
				PR3((j-8)%61);
				PR3(0xb8|lin);
				for(k=0;k<8;k++)
					{addr_ziku=linehead[i]*16+k;
					PR4(ZM[addr_ziku]);}
				PR3((j-8)%61);
				PR3(0xb8|(lin+1));
				for(k=0;k<8;k++)
					{addr_ziku=linehead[i]*16+k+8;
					PR4(ZM[addr_ziku]);}
				}//右屏字符
			}
		else//16*16
			{
			if(j<61)//左屏汉字
				{
				PR0(j-16);
				PR0(0xb8|lin);
				for(k=0;k<16;k++)
					{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
					PR1(ZM[addr_ziku]);}
				PR0(j-16);
				PR0(0xb8|(lin+1));
				for(k=0;k<16;k++)
					{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
					PR1(ZM[addr_ziku]);}
				}
			else//右屏汉字
				{
				PR3(j-61-16);
				PR3(0xb8|lin);
				for(k=0;k<16;k++)
					{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k;
					PR4(ZM[addr_ziku]);}
				PR3(j-61-16);
				PR3(0xb8|(lin+1));
				for(k=0;k<16;k++)
					{addr_ziku=(linehead[i]-asscii)*32+asscii*16+k+16;
					PR4(ZM[addr_ziku]);}
				}
			}
		}
	i+=1;

	}
}


void clear_up(void)
{
char i;
 PR0(0);
 PR3(0);
 PR0(0xb8);
 PR3(0xb8);
 for(i=0;i<61;i++)
	{
 	PR1(0);
 	PR4(0);
	}
 PR0(0);
 PR3(0);
 PR0(0xb8|1);
 PR3(0xb8|1);
 for(i=0;i<61;i++)
	{
 	PR1(0);
 	PR4(0);
	}
}
void clear_down(void)
{
char i;
 PR0(0);
 PR3(0);
 PR0(0xb8|2);
 PR3(0xb8|2);
 for(i=0;i<61;i++)
	{
 	PR1(0);
 	PR4(0);
	}
 PR0(0);
 PR3(0);
 PR0(0xb8|3);
 PR3(0xb8|3);
 for(i=0;i<61;i++)
	{
 	PR1(0);
 	PR4(0);
	}
}
//void start(void)
//{
//char show[11]=0;

//}
void celiang()
   {
     char show[16];
     clear_down();
     show[0]=null;
     show[1]=null;
     show[2]=ce;
     show[3]=liang;
     show[4]=zhong1;
     show[5]=42;
     show[6]=42;
     show[7]=42;
     show[8]=42;
     show[9]=42;
     show[10]=null;
     show[11]=null;
     show[12]=0xff;
     line_lcd(2,show);
    // char_byte(0,14,null);
   }
void menu(char id)
{
char show[16];
char i;
i=id;
i=i&0xf0;
clear_up();
clear_down();
switch(i)
	{
	case 0x00:
		        show[0]=1;
			show[1]=ji2;
			show[2]=shi;
			show[3]=null;
                        show[4]=null;
                        show[5]=null;
                        show[6]=null;
                        show[7]=null;
                        show[8]=null;
                        show[9]=null;
                        show[10]=null;
                        show[11]=null;
                        show[12]=31;
			show[13]=0xff;
			line_lcd(2,show);
			break;
	case 0x10:
			show[0]=2;
			show[1]=ping;
			show[2]=jun;
			show[3]=su;
                        show[4]=du2;
                        show[5]=null;
                        show[6]=null;
                        show[7]=null;
                        show[8]=null;
                        show[9]=null;
                        show[10]=31;
			show[11]=0xff;
			line_lcd(2,show);
			break;
	case 0x20:
			show[0]=3;
			show[1]=jia;
			show[2]=su;
			show[3]=du2;
                        show[4]=null;
                        show[5]=null;
                        show[6]=null;
                        show[7]=null;
                        show[8]=null;
                        show[9]=null;
                        show[10]=null;
                        show[11]=31;
			show[12]=0xff;
			line_lcd(2,show);
			break;
	case 0x30:
			show[0]=4;
			show[1]=ji2;
			show[2]=shu;
			show[3]=null;
                        show[4]=null;
                        show[5]=null;
                        show[6]=null;
                        show[7]=null;
                        show[8]=null;
                        show[9]=null;
                        show[10]=null;
                        show[11]=null;
                        show[12]=31;
			show[13]=0xff;
			line_lcd(2,show);
			break;

⌨️ 快捷键说明

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