demo.C
上传用户:nbddcb
上传日期:2022-05-19
资源大小:48k
文件大小:6k
源码类别:

菜单

开发平台:

Visual C++

  1. #include <REGX51.H>
  2. #include "demo.h"
  3. UCHAR  synchronization=SYN_INTERNAL;   //demo_choice=0;
  4. /*********************************************************************************************************
  5. ** 函数名称: Delay_ms
  6. ** 功能描述: 延时ms毫秒 (不精确)
  7. ********************************************************************************************************/
  8. void Delay_ms (UINT ms)
  9. {
  10. UINT i,j,k;
  11. for(k=0; k<ms; k++)
  12.       for(i=48; i>0; i--)
  13.         for(j=10; j>0; j--);
  14. }
  15. /*********************************************************************************************************
  16. ** 函数名称: MB90092_WriteByte
  17. ** 功能描述: 向MB90092 写一个字节数据
  18. ********************************************************************************************************/
  19. void MB90092_WriteByte (UCHAR _data)
  20. {
  21. UCHAR i;
  22. ACC=_data;
  23. CS=0;
  24. for (i=8;i>0;i--)
  25.  {
  26.    CLK=0;
  27.    SIN = ACC_0;
  28.    CLK=1;
  29.    ACC>>=1;
  30.      }
  31.     CS=1;
  32. }
  33. /*********************************************************************************************************
  34. ** 函数名称: MB90092_ClearXY
  35. ** 功能描述: 清掉屏幕上面坐标(x,y)处的字符,y=0x00~0x0B and x=0x00~0x17 for main screen
  36. ********************************************************************************************************/
  37. void  MB90092_ClearXY (UCHAR x,UCHAR y)
  38. {
  39. UCHAR byte1,byte2;
  40. if (x>0x17||y>0x0B) 
  41.    return;                             //invalid col number or row number
  42. byte1=((y>>2)&0x3)+0x80;
  43. byte2=((y<<5)&0x60)+x;
  44. MB90092_WriteByte(byte1);             //command 0,设置写入地址,行和列
  45. MB90092_WriteByte(byte2);
  46. MB90092_WriteByte(0x88);              //command1-1,定义字符颜色,背景颜色
  47. MB90092_WriteByte(0x00);
  48. MB90092_WriteByte(0x90+62/128);       //command2-1,写入一个空格字符,地址62为空格符点阵
  49. MB90092_WriteByte(62%128);
  50. }
  51. /*********************************************************************************************************
  52. ** 函数名称: MB90092_ClearRow
  53. ** 功能描述: 清掉屏幕上面的第y行字符,y=0x00~0x0B for main screen
  54. ********************************************************************************************************/
  55. void  MB90092_ClearRow (UCHAR y)
  56. {
  57. UCHAR x;
  58. if (y>0x0B) 
  59.   return;                            //invlid row number
  60. for (x=0;x<0x18;x++)
  61.   MB90092_ClearXY (x,y);
  62. }
  63. /*********************************************************************************************************
  64. ** 函数名称: MB90092_ClearScreen
  65. ** 功能描述: 清屏
  66. ********************************************************************************************************/
  67. void  MB90092_ClearScreen ()
  68. {
  69. UCHAR i;
  70. for (i=0;i<0x0C;i++)
  71.   MB90092_ClearRow (i);
  72. }
  73. /*********************************************************************************************************
  74. ** 函数名称: MB90092_DisColor
  75. ** 功能描述: MB90092颜色初始化
  76. ********************************************************************************************************/
  77. void  MB90092_DisColor (UCHAR y)
  78. {
  79. UCHAR temp1,temp2;
  80. temp1=((y>>2)&0x3)+0x84;
  81. temp2=((y<<5)&0x60)+1;
  82. MB90092_WriteByte(temp1);             //command 0,设置写入地址,行和列
  83. MB90092_WriteByte(temp2);
  84. MB90092_WriteByte(0x88);              //ff控制是否特显
  85. MB90092_WriteByte(0x00);              //command1-1,设置字符颜色,背景颜色
  86. MB90092_WriteByte(0x90);              //command2-1,设置字符点阵在外rom的地址
  87. MB90092_WriteByte(0x00);
  88. }
  89. /*********************************************************************************************************
  90. ** 函数名称: MB90092_DisChar
  91. ** 功能描述: 在屏幕坐标(x,y)处显示一个字符,该字符的点阵存储地址为addr,为一24x32的矩形区域
  92. ** 参  数:   x,y为屏幕坐标,addr为字符点阵在外rom的存储地址,mul为字符尺寸,bc为字符背景颜色,
  93.              cc为字符颜色,ff控制是否特显.
  94. ********************************************************************************************************/
  95. void  MB90092_DisChar (UCHAR x,UCHAR y,int addr,UCHAR mul,UCHAR bc,UCHAR cc,UCHAR ff)
  96. {
  97. UCHAR temp1,temp2,color;
  98. if (x>0x17||y>0x0B) 
  99.   return;                             //invalid col number or row number
  100. temp1=((y>>2)&0x3)+0x80;
  101. temp2=((y<<5)&0x60)+x;
  102. MB90092_WriteByte(temp1);             //command 0,设置写入地址,行和列
  103. MB90092_WriteByte(temp2);
  104. MB90092_WriteByte(0xB0|mul);          //command 6,mul->字符尺寸控制(datasheel82),设置一整行
  105. MB90092_WriteByte(0x20|y);
  106. if (synchronization==SYN_EXTERNAL)
  107.  {
  108.    cc=7;
  109.    bc=0;
  110.  }
  111. color=((cc<<4)&0x70)|bc;
  112. MB90092_WriteByte(0x88|ff);           //ff控制是否特显
  113. MB90092_WriteByte(color);             //command1-1,设置字符颜色,背景颜色
  114. MB90092_WriteByte(0x90+addr/128);     //command2-1,设置字符点阵在外rom的地址
  115. MB90092_WriteByte(addr%128);
  116. }
  117. /*********************************************************************************************************
  118. ** 函数名称: MainScreen_Init
  119. ** 功能描述: MB90092主屏初始化
  120. ********************************************************************************************************/
  121. void  MainScreen_Init (UCHAR bc)
  122. {
  123. UCHAR i;
  124.     CS=0;
  125.     Delay_ms(10);                         //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效的。
  126.     CS=1;
  127.     Delay_ms(10);
  128.     CS=0;
  129.     Delay_ms(10);
  130.     CS=1;
  131.     Delay_ms(10);
  132.     CS=0;
  133.     Delay_ms(10);
  134.     CS=1;
  135.     Delay_ms(10);
  136.     CS=0;
  137.     Delay_ms(10);
  138.     CS=1;
  139.     Delay_ms(10);
  140. MB90092_WriteByte(0xA0);              //command 4,首先选择内同步
  141. MB90092_WriteByte(0x00);
  142.       
  143. MB90092_WriteByte(0xAD);              //command 5
  144. MB90092_WriteByte(0x10);              //KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 BH1 BH0 W3 W2 W1 W0
  145.               
  146. MB90092_WriteByte(0xBC);              //command 7
  147. // MB90092_WriteByte(0x2A);              //垂直开始位置设定
  148.     MB90092_WriteByte(0x20); 
  149. MB90092_WriteByte(0xC0);              //command 8
  150. // MB90092_WriteByte(0x18);              //水平开始位置设定
  151.     MB90092_WriteByte(0x0A);
  152.    
  153. MB90092_WriteByte(0xC8);              //command 9,GRM位设置普通模式或者扩展图形模式
  154. MB90092_WriteByte(0x20);
  155.               
  156. MB90092_WriteByte(0xD1);              //command 10,设置普通模式/扩展图形模式,闪烁,字符背景,字符单色/彩色,背景单色/彩色
  157. MB90092_WriteByte(0x38|bc);
  158.    
  159. MB90092_WriteByte(0xA2|synchronization);//command 4,内/外同步选择
  160. MB90092_WriteByte(0x2B);
  161. for (i=0;i<0x0B;i++)
  162.   MB90092_DisColor (i);
  163. MB90092_ClearScreen ();
  164. }