demo.C
上传用户:nbddcb
上传日期:2022-05-19
资源大小:48k
文件大小:6k
- #include <REGX51.H>
- #include "demo.h"
- UCHAR synchronization=SYN_INTERNAL; //demo_choice=0;
- /*********************************************************************************************************
- ** 函数名称: Delay_ms
- ** 功能描述: 延时ms毫秒 (不精确)
- ********************************************************************************************************/
- void Delay_ms (UINT ms)
- {
- UINT i,j,k;
- for(k=0; k<ms; k++)
- for(i=48; i>0; i--)
- for(j=10; j>0; j--);
- }
- /*********************************************************************************************************
- ** 函数名称: MB90092_WriteByte
- ** 功能描述: 向MB90092 写一个字节数据
- ********************************************************************************************************/
- void MB90092_WriteByte (UCHAR _data)
- {
- UCHAR i;
- ACC=_data;
- CS=0;
- for (i=8;i>0;i--)
- {
- CLK=0;
- SIN = ACC_0;
- CLK=1;
- ACC>>=1;
- }
- CS=1;
- }
- /*********************************************************************************************************
- ** 函数名称: MB90092_ClearXY
- ** 功能描述: 清掉屏幕上面坐标(x,y)处的字符,y=0x00~0x0B and x=0x00~0x17 for main screen
- ********************************************************************************************************/
- void MB90092_ClearXY (UCHAR x,UCHAR y)
- {
- UCHAR byte1,byte2;
-
- if (x>0x17||y>0x0B)
- return; //invalid col number or row number
- byte1=((y>>2)&0x3)+0x80;
- byte2=((y<<5)&0x60)+x;
- MB90092_WriteByte(byte1); //command 0,设置写入地址,行和列
- MB90092_WriteByte(byte2);
- MB90092_WriteByte(0x88); //command1-1,定义字符颜色,背景颜色
- MB90092_WriteByte(0x00);
-
- MB90092_WriteByte(0x90+62/128); //command2-1,写入一个空格字符,地址62为空格符点阵
- MB90092_WriteByte(62%128);
- }
- /*********************************************************************************************************
- ** 函数名称: MB90092_ClearRow
- ** 功能描述: 清掉屏幕上面的第y行字符,y=0x00~0x0B for main screen
- ********************************************************************************************************/
- void MB90092_ClearRow (UCHAR y)
- {
- UCHAR x;
-
- if (y>0x0B)
- return; //invlid row number
-
- for (x=0;x<0x18;x++)
- MB90092_ClearXY (x,y);
- }
- /*********************************************************************************************************
- ** 函数名称: MB90092_ClearScreen
- ** 功能描述: 清屏
- ********************************************************************************************************/
- void MB90092_ClearScreen ()
- {
- UCHAR i;
- for (i=0;i<0x0C;i++)
- MB90092_ClearRow (i);
- }
- /*********************************************************************************************************
- ** 函数名称: MB90092_DisColor
- ** 功能描述: MB90092颜色初始化
- ********************************************************************************************************/
- void MB90092_DisColor (UCHAR y)
- {
- UCHAR temp1,temp2;
-
- temp1=((y>>2)&0x3)+0x84;
- temp2=((y<<5)&0x60)+1;
- MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
- MB90092_WriteByte(temp2);
- MB90092_WriteByte(0x88); //ff控制是否特显
- MB90092_WriteByte(0x00); //command1-1,设置字符颜色,背景颜色
-
- MB90092_WriteByte(0x90); //command2-1,设置字符点阵在外rom的地址
- MB90092_WriteByte(0x00);
- }
- /*********************************************************************************************************
- ** 函数名称: MB90092_DisChar
- ** 功能描述: 在屏幕坐标(x,y)处显示一个字符,该字符的点阵存储地址为addr,为一24x32的矩形区域
- ** 参 数: x,y为屏幕坐标,addr为字符点阵在外rom的存储地址,mul为字符尺寸,bc为字符背景颜色,
- cc为字符颜色,ff控制是否特显.
- ********************************************************************************************************/
- void MB90092_DisChar (UCHAR x,UCHAR y,int addr,UCHAR mul,UCHAR bc,UCHAR cc,UCHAR ff)
- {
- UCHAR temp1,temp2,color;
- if (x>0x17||y>0x0B)
- return; //invalid col number or row number
-
- temp1=((y>>2)&0x3)+0x80;
- temp2=((y<<5)&0x60)+x;
- MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
- MB90092_WriteByte(temp2);
- MB90092_WriteByte(0xB0|mul); //command 6,mul->字符尺寸控制(datasheel82),设置一整行
- MB90092_WriteByte(0x20|y);
- if (synchronization==SYN_EXTERNAL)
- {
- cc=7;
- bc=0;
- }
- color=((cc<<4)&0x70)|bc;
- MB90092_WriteByte(0x88|ff); //ff控制是否特显
- MB90092_WriteByte(color); //command1-1,设置字符颜色,背景颜色
-
- MB90092_WriteByte(0x90+addr/128); //command2-1,设置字符点阵在外rom的地址
- MB90092_WriteByte(addr%128);
- }
- /*********************************************************************************************************
- ** 函数名称: MainScreen_Init
- ** 功能描述: MB90092主屏初始化
- ********************************************************************************************************/
- void MainScreen_Init (UCHAR bc)
- {
- UCHAR i;
- CS=0;
- Delay_ms(10); //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效的。
- CS=1;
- Delay_ms(10);
- CS=0;
- Delay_ms(10);
- CS=1;
- Delay_ms(10);
- CS=0;
- Delay_ms(10);
- CS=1;
- Delay_ms(10);
- CS=0;
- Delay_ms(10);
- CS=1;
- Delay_ms(10);
- MB90092_WriteByte(0xA0); //command 4,首先选择内同步
- MB90092_WriteByte(0x00);
-
- MB90092_WriteByte(0xAD); //command 5
- MB90092_WriteByte(0x10); //KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 BH1 BH0 W3 W2 W1 W0
-
- MB90092_WriteByte(0xBC); //command 7
- // MB90092_WriteByte(0x2A); //垂直开始位置设定
- MB90092_WriteByte(0x20);
- MB90092_WriteByte(0xC0); //command 8
- // MB90092_WriteByte(0x18); //水平开始位置设定
- MB90092_WriteByte(0x0A);
-
- MB90092_WriteByte(0xC8); //command 9,GRM位设置普通模式或者扩展图形模式
- MB90092_WriteByte(0x20);
-
- MB90092_WriteByte(0xD1); //command 10,设置普通模式/扩展图形模式,闪烁,字符背景,字符单色/彩色,背景单色/彩色
- MB90092_WriteByte(0x38|bc);
-
- MB90092_WriteByte(0xA2|synchronization);//command 4,内/外同步选择
- MB90092_WriteByte(0x2B);
- for (i=0;i<0x0B;i++)
- MB90092_DisColor (i);
- MB90092_ClearScreen ();
- }