240x128液晶T6963控制器驱动程序

  • 格式:doc
  • 大小:120.50 KB
  • 文档页数:7

1. //240x128液晶T6963控制器驱动程序(C51)

2. #include "absacc.h"

3. #include "math.h"

4.

5. #define CE 1<<22

6. #define WR 1<<21

7. #define RD 1<<20

8. #define C_D 1<<19

9. #define PORTD 0xff<<18

10.

11. #define ComPort 0xB101

12. #define DataPort 0xB000

13. #define GraphAddr 0x0000 //head of graph

14.

15. //以8*8字符计算,显示屏横向、纵向可以显示的字符个数

16. //以240*128为例:

17. #define LineChar 30 //一行16个字符(8*8)

18. #define ColumnChar 16 //总共16列

19.

20.

21. //指令,数据 读写状态检查

22. #define RWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x03; } while(sta!=0x03); }

23. //数据自动读 状态检查

24. #define AutoRCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x04; } while(sta!=0x04); }

25. //数据自动写 状态检查

26. #define AutoWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x08; } while(sta!=0x08); }

27.

28. /*------输入/出函数,与T6963通讯------------------------------------------------*/

29. /*------------------------------------------------------------------------*/

30.

31. // 向数据口发Data

32. #define OutPortData(dat ) { RWCheck(); XBYTE[DataPort]=dat; }

33.

34. //写有 1 个参数命令

35. #define OutPortCom1(command) { RWCheck(); XBYTE[ComPort]= command; }

36.

37. //写有 2 个参数命令

38. #define OutPortCom2(dat, command) { OutPortData(dat); OutPortCom1(command); }

39.

40. //写有 3 个参数命令

41. #define OutPortCom3(data1, data2, command) { OutPortData(data1); OutPortData(data2); OutPortCom1(command);}

42.

43.

44. unsigned char InPortData() { RWCheck(); return(XBYTE[DataPort]); } 45.

46. /*-----------------------------------------------------------------------------------*/

47. //显示8*16字符

48. //lin:行(0-7), column: 列(0-15)

49. //ch:字符代码(标准ASCII码)

50. void ShowChar(unsigned char lin,unsigned char column,unsigned char ch)

51. {

52. unsigned char i;

53. unsigned char dat;

54. unsigned int StartAddr;

55.

56. StartAddr=lin*LineChar +column; //定位起始行

57.

58. for(i=0;i<16;i++)

59. {

60. dat=ASCII816[ ch-0x20 ][i];

61. OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address

62. OutPortCom2( dat, 0xc4);

63. StartAddr=StartAddr + LineChar;

64. }

65. }

66.

67. /*----------------------------------------------------------------------------------------------*/

68. //显示一个汉字(16*16点阵)

69. //lin:行(0-7), column: 列(0-7)

70. //hzcode: 汉字代码(自定义的)

71. void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)

72. {

73. unsigned char i;

74. unsigned int StartAddr;

75.

76. StartAddr=lin*LineChar + column; //定位起始行

77.

78. for(i=0;i<16;i++)

79. {

80. OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);

81. OutPortCom2( HZTable[hzcode][i*2], 0xc0); //左半部 地址加一

82. OutPortCom2( HZTable[hzcode][i*2+1], 0xc4); //右半部 字模地址加一

83.

84. StartAddr=StartAddr + LineChar;

85. }

86. }

87. /////////////////////////////////////////////////////////////////////////////////////////////

88. //显示一个汉字(16*16点阵) 89. //lin:行(0-7), column: 列(0-7)

90. //hzcode: 汉字代码(自定义的)

91. void ShowHZD(unsigned char lin,unsigned char column,unsigned int hzcode)

92. {

93. unsigned char i,j;

94. unsigned int StartAddr;

95.

96. StartAddr=lin*LineChar*16 +column; //定位起始行

97.

98. for(i=0;i<35;i++)

99. {

100. OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //定位当前操作位置

101. for(j=0;j<5;j++) OutPortCom2( HZTable[hzcode][i*5+j], 0xc0); //显示当前一行

102.

103. StartAddr=StartAddr + LineChar;

104. }

105. }

106.

107. ////////////////////////////////////////////////////////////////////////////////////////////

108. /*-----------------------------------------------------------------------------------*/

109. //显示一行字符串(汉字,字母混排,一行16字节)

110. //lin:行

111. //lineheadaddr: 此行汉字代码区首地址

112. void ShowLine(unsigned char lin,unsigned char column,unsigned char linehead[])

113. {

114. unsigned char i,j;

115. unsigned char byte;

116. unsigned int hzcode;

117.

118. for( i= column,j=0; i column+14 ; )

119. { byte=linehead[j];

120. if(byte 0x80) //字母

121. {

122. ShowChar(lin, i , byte);

123. i=i+1;j=j+1;

124. }

125. else // byte >= 0x80(汉字)

126. {

127. byte=byte & 0x7f; //最高位置0,即:减去0x8000

128. hzcode=byte*256 + linehead[j+1]; //加低8位,组合成整型数地址

129. ShowHZ( lin,i,hzcode);

130. i=i+2;j=j+2;

131. }

132. }