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

📄 main._c

📁 超简单的编码开关(单键飞梭开关)解码程序
💻 _C
📖 第 1 页 / 共 2 页
字号:
uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2)		//写双参数的指令
{
	if(fnST01() == 0)
		return 1;
	LCMDW = uPar1;
	if(fnST01() == 0)
		return 2;
	LCMDW = uPar2;
	if(fnST01() == 0)
		return 3;
	LCMCW = uCmd;
	return 0;	// 返回0成功
}

uchar fnPR11(uchar uCmd,uchar uPar1)	// 写单参数的指令
{
	if(fnST01() == 0)
		return 1;
	LCMDW = uPar1;
	if(fnST01() == 0)
		return 2;
	LCMCW = uCmd;
	return 0;	// 返回0成功
}


}

*/

void fnPR11(uchar lcd_code,uchar lcd_data1) 
{
        lcd_wd(lcd_data1);
        lcd_wc(lcd_code);
}



/*
uchar fnST3(void)		// 状态位ST3判断(数据自动写状态)
{
	uchar data i;
	
	for(i=10;i>0;i--)
	{
		if((LCMCW & 0x08) == 0x08)
			break;
	}
	return i;	// 若返回零,说明错误
}
*/

uchar fnST3(void)		// 状态位ST3判断(数据自动写状态)
{
	uchar i;
	
	for(i=10;i>0;i--)
	{
      
	  //if((LCMCW & 0x08) == 0x08)
			break;
	}
	return i;	// 若返回零,说明错误
}



uchar fnGetRow(void)
{
	return gCurRow;
}

uchar fnGetCol(void)
{
	return gCurCol;
}

// 设置当前地址
void fnSetPos(uchar urow, uchar ucol)
{
	uint  iPos;
	iPos = urow * 30 + ucol;
	lcd_wc3(LC_ADD_POS,iPos & 0xFF,iPos / 256);
	gCurRow = urow;
	gCurCol = ucol;
}

// 设置当前显示行、列
void cursor(uchar uRow, uchar uCol)
{
	fnSetPos(uRow * 16, uCol);
}

//清汉字行函数,参数1起始行,参数2终止行
void clsrows(uchar brow,uchar erow)
{
	uint i;
	union address baddr;
	baddr.a = 480*brow;
	lcd_wc3(LC_ADD_POS,baddr.apart.al,baddr.apart.ah);
	lcd_wc(LC_AUT_WR);
	for(i=0;i<(erow-brow)*30;i++)
	{
		fnST3();
		lcd_wd(0x00);
	}
	lcd_wc(LC_AUT_OVR);
	lcd_wc3(LC_ADD_POS,baddr.apart.al,baddr.apart.ah);
	gCurRow = brow<<4;
	gCurCol = 0;
}      


void fnLCMInit(void)
{
    lcd_wc3(LC_TXT_STP,0x00,0x0f);     	// 文本显示区首地址   10
	lcd_wc3(LC_TXT_WID,0x1E,0x00);		// 文本显示区宽度
	lcd_wc3(LC_GRH_STP,0x00,0x00);		// 图形显示区首地址
	lcd_wc3(LC_GRH_WID,0x1E,0x00);		// 图形显示区宽度
	lcd_wc(LC_CUR_SHP | 0x00);			// 光标形状
	lcd_wc3(LC_CGR_POS,0x03,0x00);		//CGRAM设置
	lcd_wc(LC_MOD_OR);					// 显示方式设置
	lcd_wc(0x9f);						// 显示开关设置
}


/***********************************************************************************/
void lcd_init(void)
{
	LCD_RES_H;
    LCD_RES_L;                          //低电平复位  
    delay_ms(30);
    LCD_RES_H;
    lcd_wc(0x80);                       //设置显示模式为逻辑“或”模式
    lcd_wc(0x98);                       //开显示
    lcd_wc3(0x40,0,0);                  //设置文本显示区首地址
    lcd_wc3(0x41,30,0);                 //设置文本显示区宽度
    lcd_wc3(0x42,0,0);                  //设置图形显示区首地址
    lcd_wc3(0x43,30,0);                 //设置图形显示区宽度
	lcd_wc3(LC_TXT_STP,0x00,0x0f) ;    	// 文本显示区首地址   10
	lcd_wc3(LC_TXT_WID,0x1E,0x00);		// 文本显示区宽度
	lcd_wc3(LC_GRH_STP,0x00,0x00);		// 图形显示区首地址
	lcd_wc3(LC_GRH_WID,0x1E,0x00);		// 图形显示区宽度
	lcd_wc(LC_CUR_SHP | 0x00);			// 光标形状
	lcd_wc3(LC_CGR_POS,0x03,0x00);		//CGRAM设置
	lcd_wc(LC_MOD_OR);					// 显示方式设置
	lcd_wc(0x9C);						// 显示开关设置,允许文本图形显示,关闭光标
}



// 清屏
void cls(void)
{
	uint  i;
    lcd_init();                     // 调用初始化  
	lcd_wc3(LC_ADD_POS,0x00,0x00);	// 置地址指针
	lcd_wc(LC_AUT_WR);				// 自动写
	for(i=0;i<4608;i++)
	{
		lcd_wd(0x00);				// 写数据
	}
	lcd_wc(LC_AUT_OVR);				// 自动写结束
	lcd_wc3(LC_ADD_POS,0x00,0x00);	// 重置地址指针
	gCurRow = 0;					// 置地址指针存储变量
	gCurCol = 0;
}




/***********************************************************************************/
void lcd_fill(uchar lcd_data)
{
        uchar i,j;
        lcd_wc(0x98);                    /* 打开图形显示,关闭文本显示   */
        lcd_wc3(0x24,0,0);               /* 设置地址指针 */
        lcd_wc(0xb0);                    /* 设置自动写数据 */
        for(i=0;i<128;i++)
        {
                for(j=0;j<30;j++)
                {
                        lcd_wd(lcd_data);/* Write display data */
                }
        }                               
        lcd_wc(0xb2);                    /* Awroff (auto reset) */
}
/***********************************************************************************/
void lcd_print(uchar x,uchar y,uchar lcd_data)
{
        lcd_wc(0x98);
        lcd_wc3(0x24,x,y);
        lcd_wc(0xb0);
        lcd_wd(lcd_data);
        lcd_wc(0xb2);
}
/******************************************************************************/
void lcd_print240128(cchar *str)
{
        uchar i,j;
        lcd_wc(0x98);
        lcd_wc3(0x24,0,0);
        lcd_wc(0xb0);
        for(i=0;i<128;i++)
        {
                for(j=0;j<30;j++)
                {
                        lcd_wd(*str++);
                }
        }
        lcd_wc(0xb2);
}


void lcd_digtal(cchar *str)
{
        uchar i,j;
        cursor(6,0);
//		lcd_wc(0x98);
//        lcd_wc3(0x24,0,0);
        lcd_wc(0xb0);
        for(i=0;i<32;i++)
        {
                for(j=0;j<30;j++)
                {
                        lcd_wd(*str++);
                }
        }
        lcd_wc(0xb2);
}



// ASCII(8*16) 及 汉字(16*16) 显示函数
uchar dprintf(uchar *fmt, ...)
{
	va_list  arg_ptr;
	uchar  c1,c2,cData;
	uchar  tmpBuf[64];				// LCD显示数据缓冲区
	uchar i=0,j,uLen,uRow,uCol;
	uint  k;
	
	va_start(arg_ptr, fmt);
	uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
	va_end(arg_ptr);

	while(i<uLen)
	{
		c1 = tmpBuf[i];
		c2 = tmpBuf[i+1];
		uRow = fnGetRow();
		uCol = fnGetCol();
		if(c1 <128)    //if(c1 >= 0)            此处与Keli不同处理,C1,C2,Cdata必须改为uchar
		{	// ASCII
			if(c1 < 0x20)
			{
				switch(c1)
				{
					case CR:
					case LF:		// 回车或换行
						i++;
						if(uRow < 112)
							fnSetPos(uRow+16,0);
						else
							fnSetPos(0,0);
						continue;
					case BS:		// 退格
						if(uCol > 0)
							uCol--;
						fnSetPos(uRow,uCol);
						cData = 0x00;
						break;
					default:		// 其他
						c1 = 0x1f;
				}
			}
			for(j=0;j<16;j++)
			{
				lcd_wc(LC_AUT_WR);		// 写数据
				if(c1 >= 0x1f)
				{
					if(j < (16-ASC_CHR_HEIGHT))
						lcd_wd(0x00);
					else
						lcd_wd(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
				}
				else
					lcd_wd(cData);
				lcd_wc(LC_AUT_OVR);
				fnSetPos(uRow+j+1,uCol);
			}
			if(c1 != BS)		// 非退格
				uCol++;
		}
		else
		{	// 中文
			for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
			{
				if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
					break;
			}
			for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
			{
				fnSetPos(uRow+k,uCol);
				lcd_wc(LC_AUT_WR);			// 写数据
				if(j < sizeof(GB_16)/sizeof(GB_16[0]))
				{
					lcd_wd(GB_16[j].Msk[k*2]);
					lcd_wd(GB_16[j].Msk[k*2+1]);
				}
				else						// 未找到该字
				{
					if(k < sizeof(GB_16[0].Msk)/4)
					{
						lcd_wd(0x00);
						lcd_wd(0x00);
					}
					else
					{
						lcd_wd(0xff);
						lcd_wd(0xff);
					}
				}
				lcd_wc(LC_AUT_OVR);
			}
			uCol += 2;
			i++;
		}
		if(uCol >= 30)			// 光标后移
		{
			uRow += 16;
			if(uRow < 0x80)
				uCol -= 30;
			else
			{
				uRow = 0;
				uCol = 0;
			}
		}
		fnSetPos(uRow,uCol);
		i++;
	}
	return uLen;
}
//T6963驱动代码结束



void cgram(void)
{
	uchar  i,j;
	lcd_wc3(LC_ADD_POS,0x00,0x1C);
	lcd_wc(LC_AUT_WR);
	for(i=8;i>0;i--)
		for(j=8;j>0;j--)
		{
			if(j<=i)   
				lcd_wd(0x18);
			else
				lcd_wd(0x00);
		}
	lcd_wc(LC_AUT_OVR);
}



//Mega32芯片初始化
//call this routine to initialize all peripherals
void init_devices(void)
{
        //stop errant interrupts until set up
        CLI(); //disable all interrupts
        port_init();
        //uart0_init();
		//watchdog_init();
		timer0_init();
		timer1_init();
        //adc_init();
		MCUCR = 0x01; //
        GICR  = 0x40; //
        TIMSK = 0x05; //timer1,timer0 interrupt sources
        SEI(); //re-enable interrupts
        //all peripherals are now initialized
}



void main(void)
{
	uint Times,tempfreq,tempadc;
	uchar temp,i;
	uchar TimesFlag;
	union uint2uchars nn;
	union address addr;
	uchar pulse_pos = 3;
	uchar exitcounter=0;
	addr.a = 0x0000;
	init_devices();
	uart_str("Jiangshu Zhenjiang Ibonding \n");
	lcd_init();
	cls();
	lcd_print240128(ourcompany);
	WDR();
	beeps(2);
	delay_ms(500);
	WDR();
	delay_ms(500);
	WDR();
	cls();
	WDR();
	while (1) { 	            
	  WDR();
	   tempfreq=Freq;
       tempfreq=tempfreq%100000;
	   DisplayBuffer[0] = tempfreq/10000+0x30;
	   tempfreq=tempfreq%10000;
	   DisplayBuffer[1] = tempfreq/1000+0x30;
	   tempfreq=tempfreq%1000;
       DisplayBuffer[2] = tempfreq/100+0x30;
	   tempfreq=tempfreq%100;
	   DisplayBuffer[3] = tempfreq/10+0x30;
	   DisplayBuffer[4] = tempfreq%10+0x30;
	   DisplayBuffer[5] = 'H';
	   DisplayBuffer[6] = 'z';
	   DisplayBuffer[7] = '\0';
	   cursor(0,1);
	   dprintf("%s",DisplayBuffer);              //display Freq
       tempfreq=keycounter;
	   DisplayBuffer[0] = tempfreq/100+0x30;
	   tempfreq=tempfreq%100;
	   DisplayBuffer[1] = tempfreq/10+0x30;
	   DisplayBuffer[2] = tempfreq%10+0x30;
	   DisplayBuffer[3] = '\0';
	   cursor(1,1);
	   dprintf("%s",DisplayBuffer);              //display keycounter
       cursor(2,1);
	   if (keydirection==0);
	       dprintf("%s","减少");
	   else
	       dprintf("%s","增加");
	   }
}	   
	   

⌨️ 快捷键说明

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