找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6373|回复: 7
收起左侧

msp430驱动LCD1602液晶显示C语言程序

[复制链接]
ID:51337 发表于 2013-7-14 16:17 | 显示全部楼层 |阅读模式
  1. #include "msp430x14x.h"
  2. #define CPU_F ((double)8000000)
  3. #define delay_us(x) __delay_cycles((long)(CPU_F)*(double)x/2000000.0)
  4. #define delay_ms(x) __delay_cycles((long)(CPU_F)*(double)x/20000.0)
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. #define RS_H  P5OUT|=BIT5
  8. #define RS_L  P5OUT&=~BIT5 //P1OUT&=~BIT0
  9. #define RW_H  P5OUT|=BIT6
  10. #define RW_L  P5OUT&=~BIT6
  11. #define E_H  P5OUT|=BIT7
  12. #define E_L  P5OUT&=~BIT7
  13. #define BF  BIT7
  14. #define DataDIR P4DIR
  15. #define DataOUT P4OUT
  16. #define DataIN  P4IN
  17. uchar lcd_shuju[]="0123456789-";//定义字符数组显示数字
  18. uchar lcd_tab[]="abcde";
  19. uchar lcd_tab1[]="XYZ";


  20. /*void LCDable(void)  //忙检测不写也可以
  21. {
  22. DataDIR&=0X00;//数据端设置为输入(读取液晶状态字,判断液晶状态)
  23. RS_L;
  24. RW_H;
  25. E_H;
  26. delay_us(4);
  27. while((DataIN & BF!=0));
  28. E_L;
  29. DataDIR|=0xff;
  30. }*/

  31. void shizhong()
  32. {
  33.   BCSCTL1=0X37;            //使用高速晶振XT2,低速模式,8分频
  34.   BCSCTL2=0XBE;           //选择时钟源为XT2,8分频,DC0震荡电阻选择内部电阻
  35. }
  36. void WriteCommond(uchar Commond) //写指令
  37. {
  38. //LCDable();
  39. DataDIR|=0xff;//数据端设置为输出
  40. RS_L;
  41. RW_L;
  42. E_L;
  43. delay_ms(4);
  44. DataOUT=Commond;
  45. delay_ms(4);
  46. E_H;
  47. delay_ms(4);
  48. E_L;
  49. RW_H;
  50. RS_H;
  51. }

  52. void WriteAddress(uchar x) //写地址
  53. {
  54.   WriteCommond(0x80|x);
  55. }

  56. void Writedata(uchar data) //写数据
  57. {
  58. //LCDable();
  59. DataDIR|=0xff;//数据端设置为输出
  60. RS_H;
  61. RW_L;
  62. E_L;
  63. delay_ms(4);
  64. DataOUT=data;
  65. delay_ms(4);
  66. E_H;
  67. delay_ms(4);
  68. E_L;
  69. RW_H;
  70. RS_L;
  71. }

  72. void LCD_Init()
  73. {
  74. DataDIR|=0xff;//数据口设置为输出
  75. P5DIR|=0XE0;//控制端设置为输出
  76. WriteCommond(0X38);//显示模式设置 16X2
  77. WriteCommond(0X0C);//开显示,光标设置为不显示
  78. WriteCommond(0X06);//开显示,光标移动模式设置为:读写一个字符后光标及地址指针加1
  79. WriteCommond(0x80+0x00);//显示起始地址
  80. WriteCommond(0X01);//清屏设置
  81. }

  82. void display_ZFC()
  83. {
  84.     uchar i;
  85.     WriteAddress(0x05);//显示起始地址:第1行第6个位置
  86.     i=0;
  87.     while(lcd_tab[i]!='\0')
  88.      {
  89.       Writedata(lcd_tab[i]);
  90.       i++;
  91.       delay_ms(50);
  92.      }
  93. }

  94. void display_ZFC1()
  95. {
  96.     uchar i;
  97.     WriteAddress(0x42);//显示起始地址:第2行第3个位置
  98.     i=0;
  99.     while(lcd_tab1[i]!='\0')
  100.      {
  101.       Writedata(lcd_tab1[i]);
  102.       i++;
  103.       delay_ms(50);
  104.      }
  105. }

  106. void display_SJ()
  107. {
  108.     uchar i;
  109.     WriteAddress(0x03);//显示起始地址:第1行第1个位置
  110.     i=0;
  111.     while(lcd_shuju[i]!='\0')
  112.      {
  113.       Writedata(lcd_shuju[i]);
  114.       i++;
  115.       delay_ms(50);
  116.      }
  117. }

  118. int main( void )
  119. {
  120.   WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
  121.   shizhong();//配置时钟
  122.   P5DIR=0xE0;//控制端设置为输出
  123.   LCD_Init();//液晶初始化
  124.   display_ZFC();//显示字符串
  125.   display_ZFC1();//显示字符串1
  126.   delay_ms(2000);
  127.   display_SJ();//显示数据串0123456789-
  128. }
复制代码

完整代码下载:http://www.51hei.com/bbs/dpj-78454-1.html
回复

使用道具 举报

ID:52343 发表于 2013-7-30 00:09 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:54808 发表于 2013-9-7 14:27 | 显示全部楼层
谢谢分享啊~
回复

使用道具 举报

ID:64877 发表于 2014-8-9 10:40 | 显示全部楼层
编译显示错误,自己又不会改。。。哎
回复

使用道具 举报

ID:64930 发表于 2014-8-10 17:40 | 显示全部楼层
看看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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