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

📄 main.c

📁 三色点阵控制
💻 C
字号:
#include <reg51.h>
#include <absacc.h>
#include "LCM.h"
#include "Serial.h"
#include "82c79.h"
#include "keyCode.h"

uchar key;
uchar pan=0;
sbit rd1  = P1^0;
sbit gd1  = P1^1;
sbit rd2  = P1^2;
sbit gd2  = P1^3;
sbit sck  = P1^4;
sbit rck  = P1^5;
sbit G    = P2^4;
uchar code yansezi[16][4]=
{
	0xF7,0xFF,0xDF,0xFF,
	0xEF,0x81,0xDF,0xFF,
	0x01,0xF7,0x1F,0xF0,
	0xBB,0xFB,0xEF,0xFB,
	0xD7,0xC1,0xF7,0xFD,
	0x01,0xDD,0x03,0xF0,
	0xDD,0xD5,0x75,0xF7,
	0xED,0xD5,0x77,0xF7,
	0xB1,0xD5,0x77,0xF7,
	0xDD,0xD5,0x07,0xF0,
	0xED,0xD5,0xF7,0xFF,
	0x71,0xEB,0xF7,0xDF,
	0x9D,0xDB,0xF7,0xDF,
	0xE6,0x9D,0xF7,0xDF,
	0x78,0xBE,0x0F,0xC0,
	0xFF,0xFF,0xFF,0xFF,

};
unsigned char code Bmp0[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 0
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:56:17
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0xC7,0x93,0x39,0x39,0x39,0x39,0x39,0x39,0x93,0xC7,0xFF,0xFF,0xFF,
};

unsigned char code Bmp1[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 1
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:55:37
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0xE7,0xE1,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0x81,0xFF,0xFF,0xFF,
};
unsigned char code Bmp2[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 2
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:56:48
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0x83,0x39,0x39,0x3F,0x9F,0xCF,0xE7,0xF3,0x39,0x01,0xFF,0xFF,0xFF,
};
unsigned char code Bmp3[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 3
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:57:05
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0x83,0x39,0x39,0x9F,0xC7,0x9F,0x3F,0x39,0x39,0x83,0xFF,0xFF,0xFF,
};
unsigned char code Bmp4[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 4
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:57:26
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0xCF,0xCF,0xC7,0xC3,0xC9,0xC9,0x01,0xCF,0xCF,0x07,0xFF,0xFF,0xFF,
};
unsigned char code Bmp5[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 5
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:57:44
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0x01,0xF9,0xF9,0x81,0x31,0x3F,0x3F,0x39,0x39,0x83,0xFF,0xFF,0xFF,
};
unsigned char code Bmp6[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 6
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:57:58
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0x87,0x93,0xF9,0xF9,0x81,0x31,0x39,0x39,0x39,0x83,0xFF,0xFF,0xFF,
};
unsigned char code Bmp7[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 7
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:58:15
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0x01,0x99,0x99,0xCF,0xCF,0xE7,0xE7,0xE7,0xE7,0xE7,0xFF,0xFF,0xFF,
};
unsigned char code Bmp8[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 8
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:58:49
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0x83,0x39,0x39,0x39,0x83,0x93,0x39,0x39,0x39,0x83,0xFF,0xFF,0xFF,
};
unsigned char code Bmp9[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : 9
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:59:10
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0xC3,0x99,0x39,0x39,0x19,0x03,0x3F,0x3F,0x93,0xC3,0xFF,0xFF,0xFF,
};
unsigned char code Bmp[16]=
{
/*----------------------------------------------------------------
--------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺
序。
;  源文件 / 文字 : -
;  宽×高(像素): 8×16
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/16字节
;  数据转换日期  : 2006-9-4 10:59:41
------------------------------------------------------------------
------------*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
uchar *bm[11]={Bmp0,Bmp1,Bmp2,Bmp3,

				Bmp4,Bmp5,Bmp6,Bmp7,Bmp8,Bmp9,Bmp}; 




sbit TT=P1^0;


void MainDelay(void);
void Serial_Init(void);
void WaitTF0(void);
void WByte(uchar input);
caidan(uchar sp);
caidan0(uchar sa);
caidan1(uchar sb);
caidan2();
Time();
yanse();
sheding();
liangdu();
zimu();
hanzi();
zimu3();
zimu4();
shuru();
hanzi2();
hanzi3();
hanzi4();
code (code *f[3][4])()={Time,
yanse,
sheding,
liangdu,
zimu,
hanzi,
zimu3,
zimu4,
shuru,
hanzi2,
hanzi3,
hanzi4, };

main()
{
	uchar sp=1;
	uchar sa=1;
	uchar sb=1;
	uchar sf=0;
	uchar sp2=0;
	uchar sa2=1;
	uchar sb2=1;
	uchar sc2=1;
	
	Init8279();
	InitCom();
	MainDelay();
	caidan(sp);
	key=0;
	while(1)
	{
		if(key)
		{
			switch(key)
			{
				case LEFT:
					sp2--;
					if(sp2==-1)
					{sp2=3;}
					if(sp==1)
					{
						sp=4;
					}
					else
					{
						sp=sp>>1;
					}
					caidan(sp);
					break;
				case RIGHT:
				sp2++;
				if(sp2==4)
				{sp2=0;}
					if(sp==4)
					{
						sp=1;
					}
					else
					{
			    		sp=sp<<1;
					}
					caidan(sp);
				break;
				case Num0:
					switch(sp)
					{
						case 1:
							
							if(sa==8)
							{
								sa=1;
							}
							else
							{
								sa=sa<<1;
							}
							sf=sa2;
							sa2++;
							if(sa2==4)
							{
								sa2=0;
							}
							caidan0(sa);

							break;
						case 2:
						
							if(sb==2)
							{
								sb=1;
							}
							else
							{
								sb=sb<<1;
							}
							sf=sb2;
							sb2++;
							if(sb2==2)
							{
								sb2=0;
							}
							caidan1(sb);
							break;
						case 4:
							sf=0;
							caidan2();
							break;
						}

					break;
				case Num8:
				
				caidan(sp);
				break;	
				case ENTER:
					(* f[sp2][sf])();
					caidan(sp);
					break;
				default:
					break;				
			}
			key=0;
		}
		
	}		
}
void MainDelay(void)
{
	uint n;
	uchar i;
	for(i=0;i<2;i++)
		for(n=0;n<40000;n++);
}
caidan(uchar sp)
{
	bit sp0=0;
	bit sp1=0;
	bit sp2=0;
	lcd_cls();
	sp0=sp&0x01;
	sp1=(sp&0x02)>>1;
	sp2=(sp&0x04)>>2;
	lcd_line(1,1,15,127,15);
	lcd_line(1,38,0,38,15);
	lcd_line(1,76,0,76,15);
	lcd_line(1,1,13,127,13);
	DisplayStr(sp0,0, 0,"控制");
	DisplayStr(sp1,6, 0,"显示");
	DisplayStr(sp2,12, 0,"输入");
}
/* -------------------------------------------------------------
                 子菜单1:温度上限设定和报警开关
				 -------------------------------------------*/


caidan0(uchar sa)
{
	uchar sa0[4];
	uchar i;
	for(i=0;i<4;i++)
	{
		sa0[i]=sa&0x01;
		sa=sa>>1;
	}
	lcd_line(1,1,15,1,64);
	lcd_line(1,127,64,127,20);
	lcd_line(1,127,20,25,20);
	lcd_line(1,25,20,20,15);
	if(sa0[3]==0)
	{
	DisplayStr(sa0[0],0, 2,"1:显示时钟");
	DisplayStr(sa0[1],0, 3,"2:颜色调节");	
	DisplayStr(sa0[2],0, 4,"3:字动作设定");
	}
	else
	{
		DisplayStr(sa0[3],0,2,"4:亮度调节");
		DisplayStr(sa0[1],0, 3,"                 ");
		DisplayStr(sa0[2],0, 4,"                  ");
	}
	
			
}
/*-----------------------------------------------------
           子菜单2:各线路的显示选择
		   -------------------------------------*/

caidan1(uchar sb)
{
	uchar sb0[2];
	uchar i;
	for(i=0;i<2;i++)
	{
		sb0[i]=sb&0x01;
		sb=sb>>1;
	}
									  
		DisplayStr(sb0[0],1, 2,"1:显示8个字母");
		DisplayStr(sb0[1],1, 4,"2:显示8个汉字");

	lcd_line(1,36,15,32,20);
	lcd_line(1,32,20,1,20);
	lcd_line(1,1,20,1,63);
	lcd_line(1,127,63,127,20);
	lcd_line(1,127,20,64,20);
	lcd_line(1,64,20,58,15);
	
		
}

/*--------------------------------------------------------------
              子菜单3:各路温度平均值和温度曲线及打印
			  ----------------------------------------------------*/

caidan2()
{
	DisplayStr(1,1, 2,"输入英文显示");
	lcd_line(1,80,15,70,20);
	lcd_line(1,70,20,1,20);
	lcd_line(1,1,20,1,63);
	lcd_line(1,127,63,127,20);
	lcd_line(1,127,20,120,20);
	lcd_line(1,120,20,110,15);
	
} 
Time()
{	uchar sp=1;
	uchar *m;
	uchar x=0;
	uchar y=0;
	uchar i=0;
	uchar  tt;
	uchar biao[8]={1,2,10,3,4,10,5,9};
	key=0;
	G=0;
	lcd_cls();
	DisplayStr(1,1, 2,"显示时钟。。。");
	while(1)
	{
		for(x=0;x<16;x++)
		{
			P2=x;
			P2|=0x80;
			for(y=0;y<8;y++)
			{
				m=bm[biao[y]];
				m=m+x;
				tt=*m;
				for(i=0;i<8;i++)
				{
					gd1=tt&0x01;
					tt=tt>>1; 
					sck=1;
					sck=0;
					if(key==3)
					{
						key=0;
						P2=0;
						return;
					}
				}
			}
			rck=1;
			rck=0;
		}
		if(key==BACK)
		{
			key=0;
		
			return;
		}
	}			

}
yanse()
{
	uchar i;
	uchar j;
	uchar x;
	uchar y;
	key=0;
	G=0;
	lcd_cls();
	DisplayStr(0,0, 0,"请设定颜色");
	DisplayStr(0,0, 1,"设定为红色");
	DisplayStr(0,0, 2,"设定为绿色");
	DisplayStr(0,0, 3,"设定为橙色");
	while(1)
	{
	
		for(x=0;x<16;x++)
		{
			P2=x;
			P2|=0x80;
			for(y=0;y<8;y++)
			{
				if(y<4)
				{
					j=yansezi[x][y];
				}
				else
				{
					j=0xff;
				}
				for(i=0;i<8;i++)
				{
					if(pan==0)
					{
						rd1=j&0x01;
					}
					else
					{
						if(pan==1)
						{
							gd1=j&0x01;
						}
						else
						{
							rd1=j&0x01;
							gd1=rd1;
						}
					}
					j=j>>1;	
					sck=1;
					sck=0;
				}
			}
			rck=1;rck=0;
		}
		if(key)
		{
			switch(key)
			{
				case Num1:
					pan=0;
					break;
				case Num2:
					pan=1;
					break;
				case Num3:
					pan=2;
					break;
				case BACK:
					key=0;
					G=1;
					return;
				default:
					break;
			}
			key=0;
		}

	}	
		
}
sheding()
{
	lcd_cls();
	DisplayStr(0,0, 0,"请选择自动作");			

}
zimu()
{
	lcd_cls();
	DisplayStr(0,0, 0,"来来,我是一个菠萝");
}
hanzi()
{}
zimu3()
{}
zimu4()
{}
shuru()
{
	lcd_cls();
	DisplayStr(0,0, 0,"来来,我是一个菠萝");
}
hanzi2()
{}
hanzi3()
{}
hanzi4()
{}
liangdu()
{
}
void Serial_Init(void)
{
	TMOD|=0X02;
	TH0=0xa0;
	TL0=TH0;
	TR0=1;//
	TF0=0;
}
void WaitTF0(void)
{
	while(!TF0);
	TF0=0;
}
void WByte(uchar input)
{
    uchar i=8;
	WaitTF0();//
    TT=(bit)0;
    WaitTF0();
    while(i--)
    {
		TT=(bit)(input&0x01); 
        WaitTF0();
        input=input>>1;
    }
	TT=(bit)1;
    WaitTF0();
} 








⌨️ 快捷键说明

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