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

📄 ra8803.c

📁 点阵液晶驱动器RA8803驱动程序,该驱动器是仪表显示部件常用的液晶驱动部件,内含中文字库,本程序为演示程序,其核心部分已经在产品中大量应用.
💻 C
📖 第 1 页 / 共 2 页
字号:
//				buzzeron();
			}
			break;
		case 8:	//延时后送出图片3
			if (disp_dlt_ct>=DIS_DLT)
			{
				LCD_CmdWrite(0x00,0xCd); // LCD 基本顯示功能設定-1---文字模式
				LCD_CmdWrite(0xF0,0xc0); // 設定中文字型為”简体”

				LCD_CmdWrite(0x60,0x00); // 設定游標水平位址(Common)----------光标地址--Y--
				LCD_CmdWrite(0x70,0x00); // 設定游標垂直位址(Segment)----------光标地址--X--

				for (m=0;m<300;m++)
				{
					main_ls=0xc000+m;
					wr_lcm_data(main_lsh);
					wr_lcm_data(main_lsl);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
			}
			break;

		case 9:	//延时后清屏
			if (disp_dlt_ct>=DIS_DLT)
			{
				LCD_CmdWrite(0x00,0xC5); // LCD 基本顯示功能設定-1
				LCD_CmdWrite(0xF0,0x80); // 設定中文字型為”简体”
				LCD_CmdWrite(0x60,0x00); // 設定游標水平位址(Common)----------光标地址--Y--
				LCD_CmdWrite(0x70,0x00); // 設定游標垂直位址(Segment)----------光标地址--X--
				for (m=0;m<40*240;m++)
				{
					wr_lcm_data(0);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
			}
			break;
		case 10:	//画园
//			if (disp_dlt_ct>=DIS_DLT1)
//			{
				for (i=0;i<160;i++)
				{
					draw_circle(160,120,i);
//					delayms(5);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
//			}

		case 11:	//延时后清屏
			if (disp_dlt_ct>=DIS_DLT1)
			{
				LCD_CmdWrite(0x60,0x00); // 設定游標水平位址(Common)----------光标地址--Y--
				LCD_CmdWrite(0x70,0x00); // 設定游標垂直位址(Segment)----------光标地址--X--
				for (m=0;m<40*240;m++)
				{
					wr_lcm_data(0);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
			}
			break;
		case 12:	//画园
			if (disp_dlt_ct>=DIS_DLT1)
			{
				for (i=0;i<80;i++)
				{
					draw_circle(160,120,2*i);
					delayms(5);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
			}

		case 13:	//延时后清屏
			if (disp_dlt_ct>=DIS_DLT1)
			{
				LCD_CmdWrite(0x60,0x00); // 設定游標水平位址(Common)----------光标地址--Y--
				LCD_CmdWrite(0x70,0x00); // 設定游標垂直位址(Segment)----------光标地址--X--
				for (m=0;m<40*240;m++)
				{
					wr_lcm_data(0);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
			}
			break;
		case 14:	//画园
//			if (disp_dlt_ct>=DIS_DLT1)
//			{
				for (i=0;i<40;i++)
				{
					draw_circle(160,120,4*i);
					delayms(10);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
//			}
		case 15:	//延时后清屏
			if (disp_dlt_ct>=DIS_DLT1)
			{
				LCD_CmdWrite(0x60,0x00); // 設定游標水平位址(Common)----------光标地址--Y--
				LCD_CmdWrite(0x70,0x00); // 設定游標垂直位址(Segment)----------光标地址--X--
				for (m=0;m<40*240;m++)
				{
					wr_lcm_data(0);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
			}
			break;
		case 16:	//画园
//			if (disp_dlt_ct>=DIS_DLT1)
//			{
				for (i=0;i<20;i++)
				{
					draw_circle(160,120,8*i);
					delayms(15);
				}
				disp_pro_flg++;
				disp_dlt_ct=0;
//				buzzeron();
//			}
		case 17:	//延时后送出图片4
			disp_pro_flg++;
			disp_dlt_ct=0;
			break;
		default:
			disp_pro_flg=1;
			disp_dlt_ct=0;
			break;
	}
}




//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---
//SED1335驱动基本函数
//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---

//------------------------------------------------------------------
//检测LCM是否忙
//------------------------------------------------------------------
void chk_lcd_buzy(void)
{
	while (lcm_buzy)
	{
//		RESET_WATCHDOG(); /* kicks the dog */
	}
}


//------------------------------------------------------------------
//写入一字节数据
//------------------------------------------------------------------
void wr_lcm_data(uchar data)
{
//	lcm_CE=1;
//	lcm_WR=1;
//	lcm_RD=1;
//	chk_lcd_buzy();
	lcm_CD=1;	//写数据
	lcm_E=0;
	lcm_RW=0;
	lcm_IO=data;
	lcm_CE=1;
	lcm_E=1;
//	nop();
	lcm_E=0;
	lcm_CE=0;
//	lcm_RW=1;
}



void LCD_CmdWrite(uchar add,uchar cmd)
{
	lcm_E=0;
	lcm_IO=add;
	lcm_CD=0;	//写指令
	lcm_RW=0;
	lcm_CE=1;
	nop();
	lcm_E=1;
	nop();
	lcm_E=0;
	lcm_CE=0;

	lcm_IO=cmd;
	lcm_RW=0;
	lcm_CE=1;
	nop();
	lcm_E=1;
	nop();
	lcm_E=0;
	lcm_CE=0;
}


//------------------------------------------------------------------
//写入一字节指令
//------------------------------------------------------------------
void wr_lcm_comd(uchar comd)
{
//	lcm_CE=1;
//	lcm_WR=1;
//	lcm_RD=1;
	lcm_CD=0;	//写指令
	lcm_E=0;
	lcm_IO=comd;
	lcm_RW=0;
	lcm_CE=1;
	lcm_E=1;
	nop();
	lcm_E=0;
	lcm_CE=0;
//	lcm_RW=1;
//	lcm_CD=1;
}


//------------------------------------------------------------------
//读出一字节数据
//------------------------------------------------------------------
uchar rd_lcm_data(void)
{
	uchar data;
//	lcm_CE=1;
//	lcm_WR=1;
//	lcm_RD=1;
//	chk_lcd_buzy();
	lcm_data_dir=0x00;	//置为输入
	lcm_CD=1;		//读数据
	lcm_E=0;
	lcm_RW=1;
	lcm_CE=1;
	lcm_E=1;
	nop();
	data=lcm_IO;
	lcm_data_dir=0xff;	//置为输出
	lcm_E=0;
	lcm_CE=0;
	return(data);
}


//------------------------------------------------------------------
//读出一字节状态
//------------------------------------------------------------------
uchar rd_lcm_status(uchar add)
{
	uchar data;
//	lcm_CE=1;
//	lcm_WR=1;
//	lcm_RD=1;
//	chk_lcd_buzy();
	lcm_CD=0;	//写指令
	lcm_E=0;
	lcm_IO=add;
	lcm_RW=0;
	lcm_CE=1;
	lcm_E=1;
	nop();
	lcm_E=0;
	lcm_CE=0;

	lcm_data_dir=0x00;	//置为输入
	lcm_CD=0;		//读状态
	lcm_E=0;
	lcm_RW=1;
	lcm_CE=1;
	lcm_E=1;
	nop();
	data=lcm_IO;
	lcm_data_dir=0xff;	//置为输出
	lcm_E=0;
	lcm_CE=0;
	return (data);
}



void ini_lcm(void)
{
	lcm_RST=0;
	delayms(250);
	delayms(250);
		RESET_WATCHDOG(); /* kicks the dog */
	delayms(250);
	delayms(250);
		RESET_WATCHDOG(); /* kicks the dog */
	delayms(250);
	delayms(250);
	lcm_RST=1;
	delayms(250);

	LCD_CmdWrite(0x00,0xC5); // LCD 基本顯示功能設定-1
	LCD_CmdWrite(0x01,0xe1); // 系統工作頻率與中斷準位設定
	LCD_CmdWrite(0x02,0x10); // LCD 記憶體讀寫速度與功能設定
	LCD_CmdWrite(0x03,0x80); // LCD 特殊顯示功能
	LCD_CmdWrite(0x10,0x6b); // LCD 基本顯示功能設定-2
	LCD_CmdWrite(0x11,0x22); // 設定游標高度與行距
	LCD_CmdWrite(0x12,0x91); // LCD 顯示圖層設定
	LCD_CmdWrite(0x20,0x27); // 設定實際顯示視窗垂直起始位址(X1)
	LCD_CmdWrite(0x30,0xEF); // 設定實際顯示視窗水平起始位址(Y1)
	LCD_CmdWrite(0x40,0x00); // 設定實際顯示視窗垂直結束位址(X2)
	LCD_CmdWrite(0x50,0x00); // 設定實際顯示視窗水平結束位址(Y2)
	LCD_CmdWrite(0x21,0x27); // 設定LCD 模組垂直起始位址(X1)
	LCD_CmdWrite(0x31,0xEF); // 設定LCD 模組水平起始位址(Y1)
	LCD_CmdWrite(0x41,0x00); // 設定LCD 模組垂直結束位址(X2)
	LCD_CmdWrite(0x51,0x00); // 設定LCD 模組水平結束位址(Y2)
	LCD_CmdWrite(0x60,0x00); // 設定游標水平位址(Common)----------光标地址--Y--
	LCD_CmdWrite(0x61,0x00); // 設定垂直開始顯示位址(Segment)
	LCD_CmdWrite(0x70,0x00); // 設定游標垂直位址(Segment)----------光标地址--X--
	LCD_CmdWrite(0x71,0x00); // 設定於水平區塊移動模式下,起始位址
	LCD_CmdWrite(0x72,0xEF); // 設定於水平區塊移動模式下,結束位址
	LCD_CmdWrite(0x80,0x06); // 游標閃爍時間設定
	LCD_CmdWrite(0x81,0x0c); // 變換FRM 極性的起始位址(Common)
	LCD_CmdWrite(0x91,0x00); // 變換FRM 極性的結束位址(Common)
	LCD_CmdWrite(0x90,0x06);
	LCD_CmdWrite(0xA0,0x10); // 中斷功能設定-----------进制中断
//	LCD_CmdWrite(0xA1,0x00); // 鍵盤掃描控制暫存器
//	LCD_CmdWrite(0xA2,0x00); // 鍵盤掃描控制輸出資料
//	LCD_CmdWrite(0xA3,0x00); // 鍵盤掃描控制輸入資料
//	LCD_CmdWrite(0xB0,0x27); // 設定水平方向中斷點的位址
//	LCD_CmdWrite(0xB1,0xEF); // 設定垂直方向中斷點的位址
//	LCD_CmdWrite(0xC0,0xD0); // 觸控螢幕功能設定
	LCD_CmdWrite(0xC1,0x35); // 讀寫並可偵測觸控螢幕的狀態
//	LCD_CmdWrite(0xC8,0x80); // 讀取觸控螢幕水平軸的資料(高位元組)
//	LCD_CmdWrite(0xC9,0x80); // 讀取觸控螢幕水平軸的資料(高位元組)
//	LCD_CmdWrite(0xCA,0x00); // 讀取觸控螢幕水平軸與垂直軸的資料(低位元組)
//	LCD_CmdWrite(0xD0,0x0C); // 設定DAC 電流輸出,可調整LCD 亮度
	LCD_CmdWrite(0xE0,0x00); // 設定寫入顯示記憶體的資料(需搭配暫存器[F0]
	LCD_CmdWrite(0xF0,0x88); // 清屏
	delayms(40);
	// 使用”
	LCD_CmdWrite(0xF0,0x80); // 設定中文字型為”简体”
	LCD_CmdWrite(0xF1,0x0F); // 改變字型垂直與水平顯示大小
	LCD_CmdWrite(0x00,0xC5); // LCD 基本顯示功能設定-1
}

//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---
//---    ---   中   ---   断   ---   服   ---   务   ---   ---
//---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---

//------------------------------------------------------------------
//TMR W 中断服务程序-----定时20毫秒
//------------------------------------------------------------------
void tmrw_isrp(void)
{
	TW.TSRW.BYTE&=0x7f;
	TW.TCNT=25536;
	clock_20ms_flg=1;
	clock_100ms_ct++;
	if (clock_100ms_ct>=50)
	{
		clock_100ms_ct=0;
		clock_500ms_flg=1;
	}

	buzzer_ct++;
	if (buzzer_ct==0)
	{
//		buz_time_l=0;
		buzzer=0;
	}
//	else 	buzzer=1;

	clock_1s_ct++;
	if (clock_1s_ct>=50)
	{
		clock_1s_ct=0;
		clock_1s_flg=1;
		disp_dlt_ct++;
	}

	clock_2s_ct++;
	if (clock_2s_ct>=100)
	{
		clock_2s_ct=0;
	}
	
}



//-----------------------------------------------------------------------//
//延时程序;
//-----------------------------------------------------------------------//
void delayms(uchar dlt)
{
uchar i;
delayt_1:
	if (dlt==0) return;
	dlt--;
	for (i=0;i<126;i++)
	{
		nop();
		nop();
		nop();
	}
//		RESET_WATCHDOG(); /* kicks the dog */
	goto delayt_1;
}


void delayus(uchar dlt)
{
uchar i;
delayt_1:
	if (dlt==0) return;
	dlt--;
	for (i=0;i<8;i++)
	{
		nop();
	}
	goto delayt_1;
}

⌨️ 快捷键说明

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