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

📄 main.c

📁 C8051F020的LCD的驱动程序
💻 C
字号:

/************************************************************************************
*  Copyright (c) 2007,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: Main.C
* 文件标识: none
* 适用器件: C8051F020
* 
* 摘 	要: 本文件是LCD测试程序,功能:开机显示"铭朗科技,WWW.MLARM.COM"信息,为待机界面。
*		  	 定义'A'~'F'为功能键。按"A"显示画点图形,按"B"显示画直线图形,按"C"显示画矩型图形,
*		  	 按"D"显示画矩型图形,按"E"显示画圆形图形, "F"显示待机界面.使用外部22.1184MHz晶振.
*
* 当前版本: 1.1
* 作 	者: 刘大伟
* 完成日期: 2007年3月7日
*
* 历史版本: 1.0
* 作 	者: 卢 阳
* 完成日期: 2004年11月14日
*
* 历史版本: 0.9 
* 原  作者: 李林利
* 完成日期: 2004年7月1日
*************************************************************************************/

/******************************引用外部头文件****************************************/
#include "main.h"

/************************************************************************************/
/******************************全局变量及数组****************************************/
unsigned char key;		//定义键值变量

/*************************************************************************************
* 主循环程序
*************************************************************************************/
void main (void)
{
#if		LCDA|LCDB
	unsigned int m,n;
	bit Cycle_Flag=0;
#endif

	//禁止看门狗定时器
	WDTCN = 0xde;
	WDTCN = 0xad;
	//初始化
	SYSCLK_Init ();
	PORT_Init ();
	Key_Init();

#if 	LCDA
	LCDA_Init(128,240,FS8x8);
#elif	LCDB
	LCDB_Init(240,320);
#elif	LCDC
	LCDC_Init();            // LCD初始化	
	LCDC_DisFull(Full);		// 满屏		
	LCDC_DisFull(Clr);		// 清屏
#endif

	dis_start0();

   	while(1)
    {
		key=GetKey();	//调用键盘扫描函数,返回的键值送变量key
		if(key!=0xFF)	//键值有效 执行按键程序
		{
			while(1)
			{
				Alarm(1);		//响铃
				Delay_ms(50);
				Alarm(0);		//关闭铃声

				switch (key)
				{
					case 0x0a:
#if 	LCDA
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDA_ClearScreen();
							for (m=0;m<128;m++)
							{
								for (n=0;n<240;n+=4)
									 LCDA_DrawPixel(m, n, 1);
								Delay_ms(30);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0a))
									break;
							}
							if((key!=0xff)&&(key!=0x0a))
								Cycle_Flag=0;
						}
#elif	LCDB
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDB_ClearScreen();
							for (m=0;m<240;m++)
							{
								for (n=0;n<320;n+=4)
								{
									LCDB_DrawPixel(m, n, 1);
								}
								Delay_ms(30);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0a))
									break;
							}
							if((key!=0xff)&&(key!=0x0a))
								Cycle_Flag=0;
						}
#elif	LCDC
						Draw_dot();
#endif
						break;
					case 0x0b:	
#if 	LCDA
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDA_ClearScreen();
							for (n=0;n<120;n+=8)
							{
								Delay_ms(100); 
								LCDA_DrawLine(0,120,128,120-n,1);
								LCDA_DrawLine(0,121,128,121+n,1);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0b))
									break;
							}
							if((key!=0xff)&&(key!=0x0b))
								Cycle_Flag=0;
						}
#elif	LCDB	
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDB_ClearScreen();
							for (m=0;m<240;m+=8)
							{
								LCDB_DrawLine(0,0,240,m,1);
								Delay_ms(100); 
								key=GetKey();
								if((key!=0xff)&&(key!=0x0b))
									break;
							}
							Delay_ms(100);
							if((key!=0xff)&&(key!=0x0b))
							{
								Cycle_Flag=0;
								continue;
							}
							for (n=0;n<320;n+=8)
							{ 
								LCDB_DrawLine(0,0,n,320,1);
								Delay_ms(100);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0b))
									break;
							}
							Delay_ms(100);
							if((key!=0xff)&&(key!=0x0b))
								Cycle_Flag=0;
						}
#elif	LCDC
						Draw_line();
#endif	
						break;
					case 0x0c:	
#if 	LCDA
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDA_ClearScreen();
							for (m=0;m<20;m++)
							{
								Delay_ms(100); 
								LCDA_DrawRectangle(0, 0, m*6, m*8, 1);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0c))
									break;
							}
							if((key!=0xff)&&(key!=0x0c))
								Cycle_Flag=0;
						}
#elif	LCDB				
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDB_ClearScreen();
							for (m=0;m<40;m++)
							{ 
								LCDB_DrawRectangle(0, 0, m*6, m*8, 1);
								Delay_ms(100);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0c))
									break;
							}
							if((key!=0xff)&&(key!=0x0c))
								Cycle_Flag=0;
						}
#elif	LCDC
						Draw_Rectangle();
#endif	
						break;
					case 0x0d:
#if 	LCDA
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDA_ClearScreen();
							for (m=0;m<5;m++)
							{
								LCDA_ClearScreen(); 
								LCDA_DrawFillRectangle(64-m*8, 120-m*15, 64+m*8, 120+m*15, 1);
								Delay_ms(500);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0d))
									break;
							}
							if((key!=0xff)&&(key!=0x0d))
								Cycle_Flag=0;
						}
#elif	LCDB
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							for(m=0;m<6;m++)
							{
						 		LCDB_ClearScreen();
								LCDB_DrawFillRectangle(110-15*m,150-20*m,130+15*m,170+20*m,1);
								Delay_ms(100);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0d))
									break;
							}
							if((key!=0xff)&&(key!=0x0d))
								Cycle_Flag=0;
						}
#elif	LCDC
						Draw_FillRectangle();
#endif		
						break;
					case 0x0e:	
#if 	LCDA
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDA_ClearScreen();
							for (m=0;m<120;m+=8)
							{
								LCDA_DrawCircle(64, 120, m, 1);
								Delay_ms(100); 
								key=GetKey();
								if((key!=0xff)&&(key!=0x0e))
									break;
							}
							if((key!=0xff)&&(key!=0x0e))
								Cycle_Flag=0;
						}
#elif	LCDB
						Cycle_Flag=1;
						while(Cycle_Flag)
						{
							LCDB_ClearScreen();
							for (m=0;m<160;m+=8)
							{ 
								LCDB_DrawCircle(120, 160, m, 1);
								Delay_ms(100);
								key=GetKey();
								if((key!=0xff)&&(key!=0x0e))
									break;
							}
							if((key!=0xff)&&(key!=0x0e))
								Cycle_Flag=0;
						}
#elif	LCDC
						Draw_circle();
#endif	
						break;
					case 0x0f:	
#if 	LCDA|LCDB
						dis_start0();
						for(;(key==0xff)|(key==0x0f);key=GetKey())
						{
							Delay_ms(20);
						}
#elif	LCDC
						LCDC_DisFull(Clr);
						dis_start0();
						for(;(key==0xff)|(key==0x0f);key=GetKey())
						{
							Delay_ms(20);
						}
#endif					
						break;
					default:
						for(;(key==0xff)|(key<0x0a);key=GetKey())
						{							
							Delay_ms(20);
						}
				 		break;
				}
			}
		}
   		Delay_ms(20);
	}
}

/****************************************************************************************
* 文件结束
****************************************************************************************/

⌨️ 快捷键说明

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