找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4547|回复: 0
收起左侧

LPC2124通过GPIO直接控制8个LED产生流水灯效果proteus仿真与源码

[复制链接]
ID:320510 发表于 2018-5-2 15:34 | 显示全部楼层 |阅读模式
LPC2124流水灯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

LPC2124单片机源程序如下:
  1. /****************************************************************************
  2. * 文 件 名:main.c
  3. * 功    能:LED显示控制。
  4. *           通过GPIO直接控制8个LED产生流水灯效果
  5. * 说    明:
  6. *           这个警告可忽略,C2892E: signed constant overflow
  7. ****************************************************************************/
  8. #include  "config.h"
  9. #include "math.h"

  10. //LCD显示屏端口定义
  11. #define LCD_SCL 1<<19
  12. #define LCD_SI  1<<20
  13. #define LCD_A0  1<<21

  14. //TC77温度传感器
  15. #define TC77_SCK        1<<16
  16. #define TC77_CS                1<<17
  17. #define TC77_SI                1<<18

  18. //LCD1602液晶显示器
  19. #define LCD1602_RS        1<<8
  20. #define LCD1602_RW        1<<9
  21. #define LCD1602_EN        1<<10
  22. #define BUSY                1<<7






  23. /****************************************************************************
  24. * 名    称:DelayNS()
  25. * 功    能:长软件延时
  26. * 入口参数:dly                延时参数,值越大,延时越久
  27. * 出口参数:无
  28. ****************************************************************************/
  29. void  DelayNS(uint32  dly)
  30. {   uint32  i;

  31.     for(; dly>0; dly--)
  32.     {
  33.         for(i=0; i<50000; i++);
  34.     }
  35. }
  36. //LCD初始化
  37. void LCD_INIT()
  38. {
  39.         IO0DIR = LCD1602_RS | LCD1602_RW | LCD1602_EN | 0xff;
  40. }

  41. //TC77初始化
  42. void TC77_INIT()
  43. {
  44.         IO1DIR = TC77_SCK | TC77_SI | TC77_CS | LCD_SCL | LCD_SI | LCD_A0;
  45. }

  46. //写命令
  47. void WR_CMD(char cmd)
  48. {
  49.         int i;
  50.         
  51.         IO1CLR = LCD_A0;
  52.         
  53.         for(i=7;i>=0;i--)
  54.         {
  55.                 IO1CLR = LCD_SCL;
  56.                
  57.                 if(cmd & (1<<i))
  58.                 {
  59.                         IO1SET = LCD_SI;
  60.                 }
  61.                 else
  62.                 {
  63.                         IO1CLR = LCD_SI;
  64.                 }
  65.                 IO1SET = LCD_SCL;
  66.         }
  67.         
  68. }
  69. //写数据  
  70. void WR_DAT(char dat)
  71. {
  72.         int i;
  73.         
  74.         IO1SET = LCD_A0;
  75.         
  76.         for(i=7;i>=0;i--)
  77.         {
  78.                 IO1CLR = LCD_SCL;
  79.                
  80.                 if(dat & (1<<i))
  81.                 {
  82.                         IO1SET = LCD_SI;
  83.                 }
  84.                 else
  85.                 {
  86.                         IO1CLR = LCD_SI;
  87.                 }
  88.                 IO1SET = LCD_SCL;
  89.         }
  90.         
  91. }
  92. //LCD显示反转
  93. void dis_reverse()
  94. {
  95.         //WR_CMD(0xc8);
  96.         WR_CMD(0xa7);
  97.         //WR_CMD(0xa1);//0xc8是顺序颠倒,0xa7是指颜色颠倒
  98. }
  99. //LCD显示子程序1
  100. void display1()
  101. {
  102.         int i;
  103.         for(i=0;i<128;i++)
  104.     {
  105.             WR_DAT(i);
  106.     }
  107. }
  108. //LCD显示子程序2
  109. void display2(int i)
  110. {
  111.         WR_CMD(0xb0+i);//表示在第三页
  112.         WR_CMD(0x10);
  113.         WR_CMD(0x00);  
  114.         
  115.         WR_DAT(0xFF);
  116.         //WR_DAT(0x66);
  117.         //WR_DAT(0x66);
  118.         //WR_DAT(0xFF);

  119. }
  120. //LCD显示子程序3
  121. void display3(int i)
  122. {
  123.         int j;
  124.         WR_CMD(0xb0+i);//表示在第三页
  125.         
  126.         for(j=0;j<8;j++)
  127.         {
  128.                 WR_CMD(0x10+j);
  129.                 WR_CMD(0x00);
  130.          
  131.                 WR_DAT(0xFF);
  132.         }
  133.         //WR_DAT(0x66);
  134.         //WR_DAT(0x66);
  135.         //WR_DAT(0xFF);

  136. }
  137. //LCD显示子程序4
  138. void display4()
  139. {
  140.           WR_CMD(0xb0+7);
  141.           WR_CMD(0x10);
  142.           WR_CMD(0x0F);  
  143.            
  144.           WR_DAT(0xFF);
  145.           WR_DAT(0x66);
  146.           WR_DAT(0x66);
  147.           WR_DAT(0xFF);
  148. }
  149. //LCD显示子程序5
  150. void dis_logo()
  151. {
  152.         int i;
  153.         int j;
  154.         const unsigned char table[][128] = {/*  共1024字节  */
  155.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x38,0x38,0x38,0x78,0x78,0x78,0x78,0x78,0x70,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  156.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xE0,0x60,0x70,0x30,0x38,0x18,0x1C,0x0C,0x0E,0x06,0x06,0x07,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  157.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x60,0x30,0x10,0x18,0x0C,0x06,0x06,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFC,0x7E,0x1E,0x1E,0x0E,0x06,0x07,0x07,0x07,0x0E,0xFE,0xFE,0xFE,0xFC,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  158.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x0F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0xE0,0xF8,0xF8,0xFC,0x8C,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x01,0x83,0x83,0x80,0x80,0x80,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0x80,0x00,0x80,0x80,0x00,0x00,0xC0,0xF0,0xF8,0xFC,0x1C,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  159.         0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFE,0xFE,0xFC,0xC0,0x80,0x80,0x80,0x80,0x80,0x81,0xC1,0xC1,0xF3,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x07,0xE0,0xFC,0xFF,0x7F,0x0F,0x03,0x01,0xC1,0xF1,0xFF,0xFF,0x1F,0xC7,0xF8,0xFC,0xFF,0x1F,0x1F,0x19,0x99,0x99,0x9F,0x1F,0x1F,0xC6,0xF0,0xFE,0xFF,0x1F,0x07,0x01,0x81,0xF1,0xFF,0xFF,0x3F,0x07,0xF0,0xFC,0xFF,0xFF,0x87,0x81,0x81,0xE1,0xFF,0xFF,0x7F,0x1F,0xC3,0xF0,0xFE,0xFF,0x1F,0xC7,0xF0,0xFE,0xFF,0x1F,0x07,0x00,0x80,0xF0,0xFC,0xFF,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  160.         0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x81,0x81,0xC0,0xC0,0xC0,0xC0,0xC0,0xC3,0xC3,0xC3,0xC3,0xC0,0xC0,0xC0,0xC2,0xC3,0xC3,0xC3,0xC0,0xC0,0x40,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x02,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x00,0x18,0x31,0x33,0x33,0x73,0x3B,0x3D,0x3F,0x1F,0x0F,0x03,0x00,0x02,0x03,0x03,0x03,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x01,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  161.         0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFE,0xFE,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x07,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  162.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x13,0x13,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  163.         };
  164.         
  165.         for(i=7;i>=0;i--)
  166.         {
  167.                 WR_CMD(0xb0+i);//表示在第三页
  168.                 WR_CMD(0x10);
  169.                 WR_CMD(0x00);
  170.                 for(j=127;j>=0;j--)
  171.                 {
  172.                         WR_DAT(table[i][j]);
  173.                 }
  174.         }
  175.         /*for(i=0;i<8;i++)
  176.         {
  177.                 WR_CMD(0xb0+i);//表示在第三页
  178.                 WR_CMD(0x10);
  179.                 WR_CMD(0x00);
  180.                
  181.                 for(j=0;j<128;j++)
  182.                 {
  183.                         WR_DAT(table[i][j]);
  184.                 }
  185.         }*/
  186. }
  187. //LCD显示子程序6
  188. void dis_CN()
  189. {
  190.         int i;
  191.         int j;
  192.         int k;
  193.         const unsigned char table[5][2][16] = {
  194.                 /*--  文字:  李  --*/
  195.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  196.                
  197.                 0x80,0x84,0x44,0x44,0x24,0x14,0x0C,0xFF,0x0C,0x14,0x24,0x44,0x44,0x84,0x80,0x00,
  198.                 0x08,0x08,0x08,0x08,0x09,0x49,0x89,0x79,0x0D,0x0B,0x09,0x08,0x08,0x08,0x08,0x00,

  199.                 /*--  文字:  金  --*/
  200.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  201.                 0x80,0x80,0x40,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x20,0x40,0x80,0x80,0x00,
  202.                 0x40,0x40,0x42,0x4A,0x72,0x42,0x42,0x7F,0x42,0x42,0x62,0x5A,0x42,0x40,0x40,0x00,

  203.                 /*--  文字:  文  --*/
  204.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  205.                 0x08,0x08,0x08,0x38,0xC8,0x08,0x09,0x0E,0x08,0x08,0xC8,0x38,0x08,0x08,0x08,0x00,
  206.                 0x80,0x80,0x40,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x20,0x40,0x40,0x80,0x80,0x00,

  207.                 /*--  文字:  真  --*/
  208.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  209.                 0x00,0x04,0x04,0xF4,0x54,0x54,0x54,0x5F,0x54,0x54,0x54,0xF4,0x04,0x04,0x00,0x00,
  210.                 0x10,0x10,0x90,0x5F,0x35,0x15,0x15,0x15,0x15,0x15,0x35,0x5F,0x90,0x10,0x10,0x00,

  211.                 /*--  文字:  棒  --*/
  212.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  213.                 0x10,0x10,0xD0,0xFF,0x90,0x10,0x44,0x54,0xD4,0x74,0x5F,0x54,0xD4,0x54,0x44,0x00,
  214.                 0x04,0x03,0x00,0xFF,0x00,0x01,0x12,0x11,0x14,0x14,0xFF,0x14,0x14,0x11,0x12,0x00
  215.         };
  216.         
  217.         for(i=0;i<2;i++)
  218.         {
  219.                 WR_CMD(0xb0+i+3);
  220.                 WR_CMD(0x10);
  221.                 WR_CMD(0x00);
  222.                
  223.                 for(j=4;j>=0;j--)
  224.                 {
  225.                         for(k=15;k>=0;k--)
  226.                         {
  227.                                 WR_DAT(table[j][i][k]);
  228.                         }
  229.                 }
  230.         }
  231. }  
  232. //LCD显示子程序7
  233. void dis_CN1()
  234. {
  235.         int i;
  236.         int j;
  237.         const unsigned char table[2][64] = {
  238.                 /*--  文字:  李  --*/
  239.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  240.                 /*0x80,0x84,0x44,0x44,0x24,0x14,0x0C,0xFF,0x0C,0x14,0x24,0x44,0x44,0x84,0x80,0x00,*/0x80,0x80,0x40,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x20,0x40,0x80,0x80,0x00,0x08,0x08,0x08,0x38,0xC8,0x08,0x09,0x0E,0x08,0x08,0xC8,0x38,0x08,0x08,0x08,0x00,0x00,0x04,0x04,0xF4,0x54,0x54,0x54,0x5F,0x54,0x54,0x54,0xF4,0x04,0x04,0x00,0x00,0x10,0x10,0xD0,0xFF,0x90,0x10,0x44,0x54,0xD4,0x74,0x5F,0x54,0xD4,0x54,0x44,0x00,
  241.                 /*0x08,0x08,0x08,0x08,0x09,0x49,0x89,0x79,0x0D,0x0B,0x09,0x08,0x08,0x08,0x08,0x00,*/0x40,0x40,0x42,0x4A,0x72,0x42,0x42,0x7F,0x42,0x42,0x62,0x5A,0x42,0x40,0x40,0x00,0x80,0x80,0x40,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x20,0x40,0x40,0x80,0x80,0x00,0x10,0x10,0x90,0x5F,0x35,0x15,0x15,0x15,0x15,0x15,0x35,0x5F,0x90,0x10,0x10,0x00,0x04,0x03,0x00,0xFF,0x00,0x01,0x12,0x11,0x14,0x14,0xFF,0x14,0x14,0x11,0x12,0x00

  242.                 /*--  文字:  金  --*/
  243.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  244.                
  245.                

  246.                 /*--  文字:  文  --*/
  247.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  248.                
  249.                

  250.                 /*--  文字:  真  --*/
  251.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  252.                
  253.                

  254.                 /*--  文字:  棒  --*/
  255.                 /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  256.                
  257.                
  258.         };
  259.         for(i=1;i>=0;i--)
  260.         {
  261.                 WR_CMD(0xb0+i+3);//表示在第三页
  262.                 WR_CMD(0x10);
  263.                 WR_CMD(0x00);
  264.                 for(j=63;j>=0;j--)
  265.                 {
  266.                         WR_DAT(table[i][j]);
  267.                         WR_DAT(table[i][j]);
  268.                 }
  269.         }
  270. }  

  271. //TC77温度传感器设置配置寄存器

  272. void WR_CONF(int conf)
  273. {
  274.         int i;
  275.         IO1SET = TC77_CS;
  276.         IO1CLR = TC77_CS;
  277.         IO1CLR = TC77_SCK;
  278.         for(i=15;i>=0;i--)
  279.         {
  280.                 IO1SET = TC77_SCK;
  281.                 if(conf & (1<<i))
  282.                 {
  283.                         IO1SET =  TC77_SI;
  284.                 }
  285.                 else
  286.                 {
  287.                         IO1CLR = TC77_SI;
  288.                 }
  289.                 IO1CLR = TC77_SCK;
  290.                
  291.         }
  292.         
  293.         IO1SET = TC77_CS;
  294. }

  295. //读取TC77温度传感器的温度传感器

  296. unsigned int RD_TEMP(void)
  297. {
  298.         int i;
  299.         int temp = 0;
  300.         IO1SET = TC77_CS;
  301.         IO1CLR = TC77_CS;
  302.         IO1CLR = TC77_SCK;
  303.         
  304.         
  305.         for(i=15;i>=0;i--)
  306.         {
  307.                 temp = temp<<1;
  308.                 IO1SET = TC77_SCK;
  309.                
  310.                 if(TC77_SI)
  311.                 {
  312.                         temp++;
  313.                 }
  314.                 IO1CLR = TC77_SCK;
  315.         }
  316.         
  317.         IO1SET = TC77_CS;
  318.         
  319.         return temp;
  320.         
  321. }

  322. //LCD1602液晶显示屏
  323.                  
  324. /*******************************************************
  325. *     功能:检查LCD是否忙碌,忙碌等待,不忙了返回
  326. ********************************************************/  

  327. void CheckBusy()  
  328. {  
  329.     IO0DIR = 0x700;//0-7输入,8-10输出   ,读状态  
  330.   
  331.     while(1)  
  332.     {  
  333.         //读状态,RS=L,RW=H,E=H  
  334.         IO0CLR = LCD1602_RS;  
  335.         IO0SET = LCD1602_RW;  
  336.         IO0SET = LCD1602_EN;  
  337.          
  338.         if(!(IO0PIN & BUSY))      //如果不忙了,返回  
  339.         {  
  340.             break;  
  341.         }  
  342.         IO0CLR = LCD1602_EN;//如果忙了,清空E标志,继续等待      
  343.     }  
  344.     IO0DIR = 0x7ff;//IO口全部恢复为输出   
  345. }  


  346. void LCD1602_WR_CMD(char cmd)
  347. {
  348.         CheckBusy(); //检查是否BUSY ,忙碌一直在此等待  
  349.   
  350.     //写指令,RS=L,RW=L,然后D0~D7=指令码,E=高脉冲发送命令  
  351.     IO0CLR = LCD1602_RS;  
  352.     IO0CLR = LCD1602_RW;  
  353.       
  354.     IO0CLR = 0xff;//清空端口  
  355.     IO0SET = cmd;  //发送数据
  356.   
  357.     IO0SET = LCD1602_EN;  
  358.    
  359.     DelayNS(10);
  360.       
  361.     IO0CLR = LCD1602_EN;//恢复,以便继续使用  
  362.         
  363. }   

  364. void LCD1602_WR_DAT(char dat)
  365. {
  366.         CheckBusy(); //检查是否BUSY ,忙碌一直在此等待  
  367.   
  368.     //写指令,RS=H,RW=L,然后D0~D7=指令码,E=高脉冲发送命令  
  369.     IO0SET = LCD1602_RS;  
  370.     IO0CLR = LCD1602_RW;  
  371.       
  372.     IO0CLR = 0xff;//清空端口  
  373.     IO0SET = dat;  //发送数据
  374.   
  375.     IO0SET = LCD1602_EN;
  376.    
  377.     DelayNS(10);
  378.       
  379.     IO0CLR = LCD1602_EN;//恢复,以便继续使用  
  380. }   

  381. void LCD1602_INIT()
  382. {        
  383.         
  384.         LCD1602_WR_CMD(0x38);
  385.         LCD1602_WR_CMD(0x0f);
  386.         LCD1602_WR_CMD(0x01);
  387. }   
  388. /*******************************************************
  389. *     功能:设置显示位置
  390. *           坐标自动加1
  391. ********************************************************/  
  392. void  Set_XY(unsigned char x,unsigned char y)  
  393. {  
  394.     switch(x)  
  395.     {  
  396.         case 0:  
  397.             y+=0x80;  
  398.             break;  
  399.         case 1:  
  400.             y+=0xc0;  
  401.             break;  
  402.     }  
  403.     LCD1602_WR_CMD(y);    //显示坐标更新 设置数据指针  
  404. }  
  405. /*******************************************************
  406. *     功能:在指定位置显示单个字符
  407. ********************************************************/  
  408. void DisplayChar(unsigned char x,unsigned char y,unsigned char data)  
  409. {  
  410.     Set_XY(x,y);  
  411.     LCD1602_WR_DAT(data);  
  412. }  
  413.   
  414. /*******************************************************
  415. *     功能:在指定位置显示字符串
  416. ********************************************************/  
  417. void DisplayString(unsigned  char x,unsigned  char y,unsigned  char *str)     
  418. {  
  419.     Set_XY(x,y);  
  420.     while(*str)  
  421.     {  
  422.         LCD1602_WR_DAT(*str);  
  423.         str++;  
  424.     }  
  425. }  
  426.   
  427.    
  428. /****************************************************************************
  429. * 名    称:main()
  430. * 功    能:根据表DISP_TAB来控制LED显示。
  431. ****************************************************************************/
  432. int  main(void)
  433. {                  
  434.         unsigned  char  str1[]="TC77 Test ...";  
  435.         unsigned  char  str2[]="T=";
  436.         int temp;
  437.         int tt;
  438. ……………………

  439. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
ARM_PROJECT_TC77.rar (145.73 KB, 下载次数: 23)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表