MSP430+LCD12864 最全的程序,还请大家帮忙解释一下其中几个函数的意思。

shenlei190810   2013-7-26 15:42 楼主
  1. //LCD_PSB=1
  2. #include
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;

  5. extern const unsigned shuzi_table[];

  6. #define LCD_DataIn P4DIR=0X00
  7. #define LCD_DataOut P4DIR=0XFF
  8. #define LCD2MCU_Data P4IN
  9. #define MCU2LCD_Data P4OUT
  10. #define LCD_CMDOut P3DIR|=0X07
  11. #define LCD_RS_H P3OUT|=0X01  //BIT0
  12. #define LCD_RS_L P3OUT&=0XFE  //~BIT0
  13. #define LCD_RW_H P3OUT|=0X02  //BIT1
  14. #define LCD_RW_L P3OUT&=0XFD  //~BIT1
  15. #define LCD_EN_H P3OUT|=0X04  //BIR2
  16. #define LCD_EN_L P3OUT&=0XFB  //~BIT2

  17. /********************************
  18. 函数名:Delay_1ms
  19. 功能:延时月1ms的时间
  20. 参数:无
  21. 返回值:无
  22. *********************************/
  23. void Delay_1ms(void)
  24. {
  25.       uchar i;
  26.           for(i=150;i>0;i--)        //数据需调测
  27.                   _NOP();
  28. }
  29. /*********************************
  30. 函数名:Delay_Nms
  31. 功能:延时N个1ms的时间
  32. 参数:n
  33. 返回值:无
  34. **********************************/
  35. void Delay_Nms(uint n)
  36. {
  37.         uint n;
  38.         for(i=n;i>0;i--)
  39.                 Delay_1ms();
  40. }
  41. /*********************************
  42. 函数名:Write_Cmd
  43. 功能:向液晶中写控制命令
  44. 参数:cmd--控制命令
  45. 返回值:无
  46. **********************************/
  47. void Write_Cmd(uchar cmd)
  48. {
  49.         uchar lcdtemp=0;
  50.         //判忙   查询方式
  51.         LCD_RS_L;
  52.         LCD_RW_H;
  53.         LCD_DataIn;
  54.         do
  55.         {
  56.                 LCD_EN_H;
  57.                 _NOP();
  58.                 lcdtemp=LCD2MCU_Data;
  59.                 LCD_EN_L;
  60.         }while(lcdtemp&0X80);

  61.         LCD_DataOut;
  62.         //LCD_RS_L;
  63.         LCD_RW_L;
  64.         MCU2LCD=cmd;
  65.         LCD_EN_H;
  66.         _NOP();
  67.         LCD_EN_L;
  68. }
  69. /********************************
  70. function name:Write_Data
  71. funtion: write data to LCD
  72. parameter: dat
  73. return: none
  74. ********************************/
  75. void Write_Data(uchar dat)
  76. {
  77.         uchar lcdtemp;
  78.     //JUDGE
  79.         LCD_RS_L;
  80.         LCD_RW_H;
  81.         LCD_DataIn;
  82.         do
  83.         {
  84.                 LCD_EN_H;
  85.                 lcdtemp=LCD2MCU_Data;
  86.                 _NOP();
  87.                 LCD_EN_L;
  88.         }while(lcdtemp&=0X80);

  89.         LCD_RS_H;
  90.         LCD_RW_L;
  91.         LCD_DataOut;

  92.         MCU2LCD_Data=dat;
  93.         LCD_EN_H;
  94.         _NOP();
  95.         LCD_EN_L;
  96. }
  97. /*********************************
  98. function name:Read_Data
  99. function:
  100. parameter:none
  101. return:the data from the port
  102. ***********************************/
  103. uchar Read_Data(void)
  104. {
  105.         uchar dat;
  106.         ucahr lcdtemp;

  107.         LCD_RS_L;
  108.         LCD_RW_H;
  109.         LCD_DataIn;
  110.         do
  111.         {
  112.                 LCD_EN_H;
  113.                 lcdtemp=LCD2MCU_Data;
  114.                 _NOP();
  115.                 LCD_EN_L;
  116.         }
  117.         while(lcdtemp&0x80);

  118.         LCD_RS_H;
  119.         LCD_EN_H;
  120.         dat=LCD2MCU_Data;
  121.         _NOP();
  122.         LCD_EN_L;
  123.         return dat;
  124. }
  125. /*********************************
  126. funtion name:Ini_Lcd
  127. function:initial LCD
  128. parameter:none
  129. return:none
  130. **********************************/
  131. void Ini_Lcd(void)
  132. {
  133.         LCD_CMDOut; //LCD控制端口设置为输出

  134.         Delay_Nms(500);
  135.         Write_Cmd(0X30);//8bit basic instrction
  136.         Delay_1ms();
  137.         Write_Cmd(0X02);//地址归位
  138.         Delay_1ms();
  139.         Write_Cmd(0X0C);//整体显示打开,游标关闭
  140.         Delay_1ms();
  141.         Write_Cmd(0x01);//clear
  142.         Delay_1ms();
  143.         Write_Cmd(0x06);//go right
  144.         Delay_1ms();
  145.         Write_Cmd(0x80);//DDRAM start from
  146. }
  147. /*******************************************
  148. function name:Disp_HZ
  149. function:display chinese charater
  150. parameter:addr---display from
  151.           pt--pointer of the array of HZ
  152.                   num--number of HZ
  153. return:none
  154. ********************************************/
  155. void Disp_HZ(uchar addr,const uchar *pt,uchar num)
  156. {
  157.         uchar i;
  158.         Write_Cmd(addr);
  159.         for(i=0;i<(num*2);i++)
  160.                 Write_Data(*(pt++));
  161. }
  162. /*******************************************
  163. function name:Clear_GDRAM
  164. function:clean the random data in GDRAM
  165. parameter:none
  166. return:none
  167. ********************************************/
  168. void Clear_GDRAM(void)
  169. {
  170.         uchar i,j,k;
  171.         Write_Cmd(0x34);
  172.     i=0x80;
  173.         for(j=0;j<32;j++)
  174.         {
  175.                 Write_Cmd(i++);
  176.                 Write_Cmd(0x80);
  177.                 for(k=0;k<16;k++)
  178.                 {
  179.                         Write_Data(0x00);
  180.                 }
  181.         }
  182.         i=0x80;
  183.         for(j=0;j<32;j++)
  184.         {
  185.                 Write_Cmd(i++);
  186.                 Write_Cmd(0x88);

  187.                 for(k=0;k<16;k++)
  188.                 {
  189.                         Write_Data(0x00);
  190.                 }
  191.         }
  192.         Write_Cmd(0x30);
  193. }
  194. /*********************************************
  195. function name:Draw_PM
  196. function:draw pictures on LCD
  197. parameter:the pointer of the data of picture
  198. return:none
  199. **********************************************/
  200. void Draw_PM(const uchar *ptr)
  201. {
  202.         uchar i,j,k;

  203.         Write_Cmd(0x34);
  204.         i=0x80;
  205.         for(j=0;j<32;j++)
  206.         {
  207.                 Write_Cmd(i++);
  208.                 Write_Cmd(0x80);
  209.                 for(j=0;j<32;j++)
  210.                 {
  211.                         Write_Data(*(ptr++));
  212.                 }
  213.         }
  214.         i=0x80;
  215.         for(j=0;j<32;j++)
  216.         {
  217.                 Write_Cmd(i++);
  218.                 Write_Cmd(0x88);
  219.                 for(k=0;k<16;k++)
  220.                 {
  221.                         Write_Data(*(ptr++));
  222.                 }
  223.         }
  224.         Write_Cmd(0x36);
  225.     Write_Cmd(0x30);
  226. }
  227. /******************************************
  228. function name:Draw_UP
  229. function:up 128*32
  230. parameter:the pointer of data
  231. return:none
  232. ******************************************/
  233. void Draw_UP(const uchar *ptr)
  234. {
  235.         uchar i,j,k;
  236.    
  237.         Write_Cmd(0x34);
  238.         i=0x80;
  239.         for(j=0;j<32;j++)
  240.         {
  241.                 Write_Cmd(i++);
  242.                 Write_Cmd(0x80);
  243.                 for(k=0;k<16;k++)
  244.                 {
  245.                         Write_Data(*(ptr++));
  246.                 }
  247.         }
  248.         Write_Cmd(x036);//打开绘图开关
  249.         Write_Cmd(0x30);
  250. }
  251. /******************************************
  252. fuction name:Draw_DN
  253. function:down 128*32
  254. patameter:the pointer of data
  255. return:none
  256. *******************************************/
  257. void Draw_DN(const uchar *ptr)
  258. {
  259.         uchar i,j,k;
  260.        
  261.         i=0x80;
  262.         Write_Cmd(0x34);
  263.         for(j=0;j<32;j++)
  264.         {
  265.                 Write_Cmd(i++);
  266.                 Write_Cmd(0x88);

  267.                 for(k=0;k<16;k++)
  268.                 {
  269.                         Write_Data(*(ptr++));
  270.                 }
  271.         }
  272.         Write_Cmd(0x36);
  273.         WritE_Cmd(0x30);
  274. }
  275. /****************************************
  276. function name:Draw_Point
  277. fucntion:
  278. parameter:直角坐标,x水平坐标,y垂直坐标,color:1点亮0擦除。
  279. return:none
  280. *****************************************/
  281. void Draw_Point(const uchar x,const uchar y,const uchar color)
  282. {
  283.         uchar row,collum,cbite;
  284.         uchar tempH,tenpL;
  285.         Write_Cmd(0x34);
  286.         collum=x>>4;
  287.         cbite=x&0x0f;
  288.         if(y<32)
  289.                 row=y;
  290.         else
  291.         {
  292.                 row=y&0x1f;
  293.                 collum|=0x08;
  294.         }
  295.         Write_Cmd(0x80+row);
  296.         Write_Cmd(0x80+collum);
  297.         Read_Data();
  298.         tempH=Read_Data();
  299.         tempL=Read_Data();
  300.         if(color)
  301.         {
  302.                 if(cbite<8)
  303.                         tempH|=(0x80>>cbite);
  304.                 else
  305.                         tempL|=(0x80>>(cbite-8));
  306.         }
  307.         else
  308.         {
  309.                 if(cbite<8)
  310.                         tempH&=~(0x80>>cbite);
  311.                 else
  312.                         tempL&=~(0x80>>(cbite-8));
  313.         }
  314.         Write_Cmd(0x80+row);
  315.         Write_Cmd(0x80+collum);
  316.         Wrtie_Data(tempH);
  317.         Write_Data(tempL);
  318.         Write_Cmd(0x36);
  319.         Write_Cmd(0x30);
  320. }
  321. /*****************************************
  322. function name:Draw_RowLine
  323. fucnction:
  324. parameter:起点水平x0,终点水平x1,垂直y,color:1点亮0擦除
  325. return:none
  326. ******************************************/
  327. void Draw_RowLine(const uchar x0,const uchar x1,const uchar y,const uchar color)
  328. {
  329.         uchar temp;
  330.        
  331.         if(x0>x1)
  332.         {
  333.                 temp=x1;
  334.                 x1=x0;
  335.                 x0=temp;
  336.         }
  337.         do
  338.         {
  339.                 Draw_Point(x0,y,color);
  340.                 x0++;
  341.         }
  342.         while(x0<=x1);
  343. }
  344. /******************************************************
  345. function name:Draw_CollumLine
  346. function:
  347. parameter:水平坐标x,起点垂直坐标y0,终点垂直坐标y1,color:1点亮2擦除
  348. return:none
  349. *******************************************************/
  350. void Draw_CollumLine(const uchar x.const uchar y0,const uchar y1,const uchar color)
  351. {
  352.         uchar temp;
  353.        
  354.         if(y0>y1)
  355.         {
  356.                 temp=y1;
  357.                 y1=y0;
  358.                 y0=temp;
  359.         }
  360.         do
  361.         {
  362.                 Draw_point(x,y0,color);
  363.                 y0++;
  364.         }
  365.         while(y0<=y1);
  366. }
  367. /**********************************************
  368. function name:Draw_Line
  369. function:使用Bresenham法,画任意两点间的直线
  370. parameter:起点坐标(x0,y0),终点坐标(x1,y1),color:1点亮0擦除
  371. return:none
  372. ***********************************************/
  373. void Draw_Line(const uchar x0,const uchar y0,const uchar x1,const uchar y1,const uchar color)
  374. {
  375.         int dx;
  376.         int dy;
  377.         char dx_sym;
  378.         char dy_sym;
  379.         int dx_2;
  380.         int dy_2;
  381.         int di;//决策变量
  382.        
  383.         dx=x1-x0;
  384.         dy=y1-y0;
  385.        
  386.         if(dx<0)
  387.                 dx_sym=-1;
  388.         else
  389.         {
  390.                 if(dx>0)
  391.                         dx_sym=1;
  392.                 else
  393.                    {
  394.                          Draw_CollumLine(x0,y0,y1,color);
  395.                      return;
  396.                    }
  397.         }

  398.         if(dy<0)
  399.                 dy_sym=-1;
  400.         else
  401.         {
  402.                 if(dy>0)
  403.                         dy_sym=1;
  404.                 else
  405.                 {
  406.                         Draw_RowLine(x0,x1,y0,color);
  407.                         return;
  408.                 }
  409.         }
  410.         dx=dx_sym*dx;
  411.         dy=dy_sym*dy;

  412.         dx_2=dx*2;
  413.         dy_2=dy*2;

  414.         if(dx>=dy)
  415.         {
  416.                 di=dy_2-dx;
  417.                 while(x0!=x1)
  418.                 {
  419.                         Draw_Point(x0,y0,color);
  420.                         x0+=dx_sym;
  421.                         if(di<0)
  422.                                 di+=dy_2;
  423.                         else
  424.                         {
  425.                                 di+=dy_2-dx_2;
  426.                                 y0+=dy_sym;
  427.                         }
  428.                 }
  429.                 Draw_Point(x0,y0,color);
  430.         }
  431.         else
  432.         {
  433.                 di=dx_2-dy;
  434.                 while(y0!=y1)
  435.                 {
  436.                         Draw_Point(x0,y0,color);
  437.                         y0+=dy_sym;
  438.                         if(di<0)
  439.                                 di+=dx_2;
  440.                         else
  441.                         {
  442.                                 di+=dx_2-dy_2;
  443.                                 x0+=dx_sym;
  444.                         }
  445.                 }
  446.                 Draw_Point(x0,y0,color);
  447.         }

  448. }
  449. /*******************************************

回复评论 (4)

你这个问题不好回答啊。

不知道你想问那个函数,那个地方不明白,函数的功能,作者不都说了么。要不你在仔细体会体会,有什么问题大家再讨论讨论。
点赞  2013-7-26 15:54

回复 沙发wzjhuohua 的帖子

我仔细看了看,前面的几个函数都懂,就是从函数画点
/****************************************
function name:Draw_Point 画点
fucntion:
parameter:直角坐标,x水平坐标,y垂直坐标,color:1点亮0擦除。
return:none
*****************************************/
开始不行的,您能否解释一下这个函数的大概意思
点赞  2013-7-26 16:48
额。。程序谁写的。。。这么多语法错误。。。
点赞  2014-1-8 21:43
引用: yc_2503 发表于 2014-1-8 21:43
额。。程序谁写的。。。这么多语法错误。。。

额。。语法错误不是太多。。一大堆细节错误。。。  
点赞  2014-1-8 21:44
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复