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

📄 clockofoled.c

📁 对气体检测仪进行设置
💻 C
字号:
#include <REG932.H>
#include "zimo.h"

sbit UP=P3^1;
sbit DOWN=P3^0;
unsigned char temp,s,min,hour;

void disc(unsigned char,unsigned char,unsigned char *);
void dish(unsigned char,unsigned char,unsigned char *);
void disn(unsigned char,unsigned char,unsigned char);
void ini_oled(void);
void WriteCommand(unsigned);
void ini_io(void);

void welcome()
{
/*	disc(0,0,w);
	disc(1,0,w);
	disc(2,0,w);
	disc(3,0,dot);
	disc(4,0,h);
	disc(5,0,h);
	disc(6,0,d);
	disc(7,0,z);
	disc(8,0,w);
	disc(9,0,dot);
	disc(10,0,c);
	disc(11,0,o);
	disc(12,0,m);

/*	WriteCommand(0x26);
	WriteCommand(0x02);
	WriteCommand(0xb6);
	WriteCommand(0x00);
	WriteCommand(0xb7);

	WriteCommand(0x2f);*/
	disc(2,0,o);
	disc(3,0,l);
	disc(4,0,e);	
	disc(5,0,d);
	dish(6,0,dian);
	dish(8,0,zi);
	dish(10,0,shi);
	dish(12,0,zhong);

	//dish(0,1,gong);dish(2,1,li);
	disn(1,1,2);disn(2,1,0);disn(3,1,0);disn(4,1,6);dish(5,1,year);
	disn(7,1,1);disn(8,1,1);dish(9,1,month);disn(11,1,0);disn(12,1,9);dish(13,1,day);
	//dish(0,3,nong);dish(2,3,li);
	dish(5,3,xing);dish(7,3,qi);dish(9,3,si);

	disn(4,2,0);disn(5,2,0);disc(6,2,mao);disn(7,2,0);
	disn(8,2,0);disc(9,2,mao);disn(10,2,0);disn(11,2,0);
}
void ini()
{
	TMOD=0x01;
	ET0=1;
	EA=1;
	TR0=1;
}

void ini_io()
{ 
 P1M1 = 0x00; 	 
 P1M2 = 0x00;
 P0M1 = 0x00; 	 
 P0M2 = 0x00;
 P2M1 = 0x00; 
 P2M2 = 0x00;
 DIVM=12;
}

void main()
{    
	unsigned long cc;
	unsigned char state=1;
	ini();
	ini_io();
	ini_oled();		
	WriteCommand(0xAD); // Set DC-DC
	WriteCommand(0x8B); // 8B=ON, 8A=Off
	welcome();
	WriteCommand(0xaf);
	EA=0;
	while(1){}
	{
		if(!DOWN)
		{
			WriteCommand(0xAf); // AF=ON , AE=OFF
			while(!DOWN);
			state++;
			if(state>=10)
				min++;
			if(min>59) 
				min=0;			
			WriteCommand(0x2e);
			disn(7,2,min/10);
			disn(8,2,min%10);
			WriteCommand(0x2f);
			cc=0;		
		}
		if(!UP)
		{
			WriteCommand(0xAF); // AF=ON , AE=OFF
			while(!UP);
			if(state!=0)
				hour++;
			if(hour>23)		
				hour=0;
			WriteCommand(0x2e);
			disn(4,2,hour/10);
			disn(5,2,hour%10);
			WriteCommand(0x2f);
			cc=0;		
		}	//	key panduan						
		if(cc>=400000)	
		{
		//	WriteCommand(0xae);	
			cc=500000;
			state=0;		
		}
		else
		{
			cc++;					
			state=10;
		}
	}
}

void timer0() interrupt 1 using 0
{
	TH0=0X4C;
	TL0=0X00;
	temp++;
	WriteCommand(0x2e);  //水平滚动关闭
	if(temp>=20)
	{
		temp=0;
		s++;	
		if(s>59) 
		{
			s=0;		
			min++;		
			if(min>59) 
			{
				min=0;			
				hour++;
				if(hour>23)		
					hour=0;
				disn(4,2,hour/10);
				disn(5,2,hour%10);
			
			}
			disn(7,2,min/10);
			disn(8,2,min%10);
		}
		disn(10,2,s/10);
		disn(11,2,s%10);
	}
	WriteCommand(0x2f);    //水平滚动使能
}

//以下为接口定义,根据用户的实验板接口不同而自行定义

//#define PAR 1
#ifdef PAR
#define DAT P0
sbit WRO=P2^7;
sbit RDO=P2^6;
sbit RES=P2^5;
sbit DC=P2^4;
sbit CS=P2^3;
#else
//以上为数据端口定义
sbit CLK=P0^2;  //*原为P0^0
sbit DATA=P2^2;
sbit RES1=P2^5;
sbit DC=P2^4;
sbit CS=P2^3;
#endif
unsigned char code num[10][16]={
{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0"*/
{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1"*/
{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2"*/
{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3"*/
{0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4"*/
{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5"*/
{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6"*/
{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7"*/
{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8"*/
{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00} /*"9"*/
};
//****************************主要操作函数************************************
void WriteCommand(unsigned com);		//写命令程序
void WriteData(unsigned dat);			//写数据程序
void esbusini(void);					//初始化总线程序
void ini_oled(void);            		//OLED初始化
void ini_dis(void);						//显示初始化(清除缓冲区)
/**************************实现函数********************************************
*函数原型:		unsigned char ReadCommand(void);
*功  能:		从oled上读当前命令到控制器。
*******************************************************************************/
void WriteCommand(unsigned com)
{
	#ifdef PAR
	CS=1;
	DC=0;
	WRO=0;	
	RDO=1;
	CS=0;
	DAT=com;	
	CS=1;	
	#else
	unsigned char i;
	CS=1;
	CS=0;
	DC=0;
	for(i=0x80;i>0;i/=2)
	{
		CLK=0;
		if(com&i)
			DATA=1;
		else
			DATA=0;
		CLK=1;
	}
	CS=1;
	#endif
}
/**************************实现函数********************************************
*函数原型:		void WriteData(unsigned dat);
*功  能:		写数据到oled显示屏。
*******************************************************************************/
void WriteData(unsigned dat)
{
	#ifdef PAR
	CS=1;
	DC=1;	
	WRO=0;
	RDO=1;
	CS=0;
	DAT=dat;
	CS=1;
	#else
	unsigned char i;
	CS=1;
	DC=1;
	CS=0;
	for(i=0x80;i>0;i/=2)
	{
		CLK=0;
		if(dat&i)
			DATA=1;
		else
			DATA=0;
		CLK=1;
	}
	CS=1;
	#endif
}
/**************************实现函数********************************************
*函数原型:		void esbusini(void);
*功  能:		总线初始化。
*******************************************************************************/
void esbusini(void)
{
	RES1=0;
	RES1=1;
}
/**************************实现函数********************************************
*函数原型:		void ini_dis(void);
*功  能:		显示初始化。
*******************************************************************************/
void ini_dis(void)
{
	unsigned char i,j;
	for(i=0;i<8;i++)
	{
		WriteCommand(0xb0+i);    //设置显示位置—行
		WriteCommand(0x00);      //设置显示位置—列低地址
		WriteCommand(0x10);      //设置显示位置—列高地址
		for(j=0;j<128;j++)
			WriteData(0x00);        //屏幕显示,全亮
	}
}
/**************************实现函数********************************************
*函数原型:		void ini_oled(void);
*功  能:		oled显示的准备工作。
*******************************************************************************/
void ini_oled(void)
{
	esbusini();
	/*************************************************
	// SSD1303 Initialization Command
	*************************************************/
	// Lower Column Address
	WriteCommand(0x00); /* Set Lower Column Address */
	// High Column Address
	WriteCommand(0x10); /* Set Higher Column Address*/
	// Display Start Line
	WriteCommand(0x40); /* Set Display Start Line */
	// Contrast Control Register
	WriteCommand(0x81); /* Set Contrast Control */
	WriteCommand(0x20); /* 0 ~ 255 */
	// Re-map
	WriteCommand(0xA0); /* [A0]:column address 0 is map 
	to SEG0 , [A1]: columnaddress 131 is map to SEG0*/ 
	// Entire Display ON/OFF
	WriteCommand(0xA4); /* A4=ON */
	// Normal or Inverse Display
	WriteCommand(0XA6); /* Normal Display*/
	// Multiplex Ratio
	WriteCommand(0xA8); /* Set Multiplex Ratio */
	WriteCommand(0x3f); /* Set to 36 Mux*/
	// Set DC-DC
	WriteCommand(0xAD); /* Set DC-DC */
	WriteCommand(0x8A); /* 8B=ON, 8A=Off */
	// Display ON/OFF
	WriteCommand(0xAE); /* AF=ON , AE=OFF*/
	// Display Offset
	WriteCommand(0xD3); /* Set Display Offset */
	WriteCommand(0x00); /* No offset */
	// Display Clock Divide
	WriteCommand(0xD5); /* Set Clock Divide */
	WriteCommand(0x20); /* Set to 80Hz */
	// Area Color Mode
	WriteCommand(0xD8); /* Set Area Color On or Off*/
	WriteCommand(0x00); /* Mono Mode */
	// COM Pins Hardware Configuration
	WriteCommand(0xDA); /* Set Pins HardwareConfiguration */
	WriteCommand(0x12);
	// VCOMH
	WriteCommand(0xDB); /* Set VCOMH */
	WriteCommand(0x00);
	// VP
	WriteCommand(0xD9); /* Set VP */
	WriteCommand(0x22); /* P1=2 , P2=2 */
	WriteCommand(0xc0);//配置成标准应用
	ini_dis();
}
/*******************************function************************************************************/
//*******************显示X,Y坐标处的一个字符。一行可以显示16个字符。X为0到15,Y为0到3**************
void disc(unsigned char X,unsigned char Y,unsigned char * c)
{
	unsigned char n;
	WriteCommand (0xb7-(Y<<1));
	if(X%2)
		WriteCommand (0x08);
	else
		WriteCommand (0x00);
	WriteCommand (0x10+(X>>1));
	for(n=0;n<=15;n+=2)
		WriteData(*(c+n));

	WriteCommand (0xb7-(Y<<1)-1);
	if(X%2)
		WriteCommand (0x08);
	else
		WriteCommand (0x00);
	WriteCommand (0x10+(X>>1));
	for(n=1;n<=15;n+=2)
		WriteData(*(c+n));
}
// X  is 0 to 7
void dish(unsigned char X,unsigned char Y,unsigned char * h)
{
	unsigned char n;
	WriteCommand (0xb7-(Y<<1));
	if(X%2)
		WriteCommand (0x08);
	else
		WriteCommand (0x00);
	WriteCommand (0x10+(X>>1));
	for(n=0;n<=31;n+=2)
		WriteData(*(h+n));

	WriteCommand (0xb7-(Y<<1)-1);
	if(X%2)
		WriteCommand (0x08);
	else
		WriteCommand (0x00);
	WriteCommand (0x10+(X>>1));
	for(n=1;n<=31;n+=2)
		WriteData(*(h+n));
}
void disn(unsigned char X,unsigned char Y,unsigned char n)
{
	unsigned char m;
	WriteCommand (0xb7-(Y<<1));  //
	if(X%2)
		WriteCommand (0x08);    //设置低位列地址
	else
		WriteCommand (0x00);    //设置低位列地址
	WriteCommand (0x10+(X>>1));
	//for(n=0;n<=15;n+=2)
	//	WriteData(*(c+n));
	for(m=0;m<=15;m+=2)
		WriteData(*(num[n]+m));                     

	WriteCommand (0xb7-(Y<<1)-1);
	if(X%2)
		WriteCommand (0x08);
	else
		WriteCommand (0x00);
	WriteCommand (0x10+(X>>1));
	for(m=1;m<=15;m+=2)
		WriteData(*(num[n]+m));
}

⌨️ 快捷键说明

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