找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3089|回复: 4
打印 上一主题 下一主题
收起左侧

MSP430F5529+1602源程序

[复制链接]
跳转到指定楼层
楼主
ID:580450 发表于 2020-10-6 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "MSP430F5529.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define CPU_F ((double)8000000)   //外部高频晶振8MHZ
  5. //#define CPU_F ((double)32768)   //外部低频晶振32.768KHZ
  6. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  7. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
  8. //12864/1602液晶控制管脚
  9. #define RS_CLR                P6OUT &= ~BIT1           //RS置低
  10. #define RS_SET                P6OUT |=  BIT1           //RS置高

  11. #define RW_CLR                P6OUT &= ~BIT2           //RW置低
  12. #define RW_SET                P6OUT |=  BIT2          //RW置高

  13. #define EN_CLR                P6OUT &= ~BIT3           //E置低
  14. #define EN_SET                P6OUT |=  BIT3           //E置高
  15. //彩屏/12864液晶/1602液晶的数据口,三液晶共用
  16. #define DataDIR         P3DIR                     //数据口方向
  17. #define DataPort        P3OUT                     //P4口为数据口

  18. void clock_init()
  19. {
  20.   UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFO
  21.   UCSCTL4 |= SELA_2;                        // Set ACLK = REFO
  22.   UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx

  23.   // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
  24.   do
  25.   {
  26.     UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
  27.                                             // Clear XT2,XT1,DCO fault flags
  28.     SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  29.   }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
  30.         
  31.   __bis_SR_register(SCG0);                  // Disable the FLL control loop
  32.   UCSCTL1 = DCORSEL_5;                      // Select DCO range 16MHz operation
  33.   UCSCTL2 |= 249;                           // Set DCO Multiplier for 8MHz
  34.                                             // (N + 1) * FLLRef = Fdco
  35.                                             // (249 + 1) * 32768 = 8MHz
  36.   __bic_SR_register(SCG0);                  // Enable the FLL control loop

  37.   // Worst-case settling time for the DCO when the DCO range bits have been
  38.   // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
  39.   // UG for optimization.
  40.   // 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle
  41.   __delay_cycles(250000);
  42. }

  43. //*************************************************************************
  44. //                        初始化IO口子程序
  45. //*************************************************************************
  46. void Port_init()
  47. {
  48.         P1DIR|=BIT0;
  49.         P1OUT|=BIT0;
  50.         P3SEL = 0x00;
  51.         P3DIR = 0xFF;                   //数据口输出模式
  52.         P6SEL = 0x00;
  53.         P6DIR|= BIT1 + BIT2 + BIT3;     //控制口设置为输出模式
  54. }

  55. //***********************************************************************
  56. //        显示屏命令写入函数
  57. //***********************************************************************
  58. void LCD_write_com(unsigned char com)
  59. {        
  60.         RS_CLR;
  61.         RW_CLR;
  62.         EN_SET;
  63.         DataPort = com;                 //命令写入端口
  64.         delay_ms(5);
  65.         EN_CLR;
  66. }

  67. //***********************************************************************
  68. //        显示屏数据写入函数
  69. //***********************************************************************
  70. void LCD_write_data(unsigned char data)
  71. {
  72.         RS_SET;
  73.         RW_CLR;
  74.         EN_SET;
  75.         DataPort = data;                //数据写入端口
  76.         delay_ms(5);
  77.         EN_CLR;
  78. }

  79. //***********************************************************************
  80. //        显示屏清空显示
  81. //***********************************************************************
  82. void LCD_clear(void)
  83. {
  84.         LCD_write_com(0x01);            //清屏幕显示
  85.         delay_ms(5);
  86. }

  87. //***********************************************************************
  88. //        显示屏字符串写入函数
  89. //***********************************************************************
  90. void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
  91. {
  92.         
  93.     if (y == 0)
  94.     {
  95.             LCD_write_com(0x80 + x);        //第一行显示
  96.     }
  97.     else
  98.     {
  99.             LCD_write_com(0xC0 + x);        //第二行显示
  100.     }
  101.    
  102.     while (*s)
  103.     {
  104.             LCD_write_data( *s);
  105.             s ++;
  106.     }
  107. }

  108. //***********************************************************************
  109. //        显示屏单字符写入函数
  110. //***********************************************************************
  111. void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)
  112. {
  113.         
  114.     if (y == 0)
  115.     {
  116.             LCD_write_com(0x80 + x);        //第一行显示
  117.     }
  118.     else
  119.     {
  120.             LCD_write_com(0xC0 + x);        //第二行显示
  121.     }
  122.    
  123.     LCD_write_data( data);  
  124. }

  125. //***********************************************************************
  126. //        显示屏初始化函数
  127. //***********************************************************************
  128. void LCD_init(void)
  129. {
  130.     LCD_write_com(0x38);                //显示模式设置  
  131.     delay_ms(5);
  132.     LCD_write_com(0x08);                //显示关闭
  133.     delay_ms(5);
  134.     LCD_write_com(0x01);                //显示清屏
  135.     delay_ms(5);
  136.     LCD_write_com(0x06);                //显示光标移动设置
  137.     delay_ms(5);
  138.     LCD_write_com(0x0C);                //显示开及光标设置
  139.     delay_ms(5);
  140. }

  141. void main( void )
  142. {
  143.   // Stop watchdog timer to prevent time out reset
  144.   WDTCTL = WDTPW + WDTHOLD;
  145.   clock_init();
  146.   uchar i,*p;
  147.   Port_init();                        //系统初始化,设置IO口属性
  148.   delay_ms(100);                      //延时100ms
  149.   LCD_init();                         //液晶参数初始化设置
  150.   LCD_clear();                        //清屏
  151.    while (1)
  152.       {
  153.                 i = 1;
  154.                 p = "xxxxxxxx";                //字符串输出显示
  155.                 LCD_clear();
  156.                 LCD_write_str(0,0,"Welcome.DM430-L");
  157.                 delay_ms(250);
  158.                
  159.                 while (*p) {
  160.                         LCD_write_char(i,1,*p);      //单个字符输出显示
  161.                         i ++;
  162.                         p ++;
  163.                         delay_ms(100);               //延时250ms
  164.                         }
  165.                 delay_ms(250);
  166.                 P1OUT^=BIT0;
  167.       }
  168. }
复制代码


1602.zip

423.5 KB, 下载次数: 27, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:819974 发表于 2021-3-6 14:06 | 只看该作者
能问一下是用什么软件写的吗?
回复

使用道具 举报

板凳
ID:876849 发表于 2021-3-9 16:13 | 只看该作者
学习一波大佬的操作
回复

使用道具 举报

地板
ID:956252 发表于 2021-7-26 09:57 | 只看该作者
想问一下,lcd怎么接线呢?
回复

使用道具 举报

5#
ID:896149 发表于 2021-8-1 22:11 | 只看该作者
wj520yyj 发表于 2021-7-26 09:57
想问一下,lcd怎么接线呢?

我也想知道
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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