1602控制forMSP430

发布者:lxy64420245最新更新时间:2015-09-17 来源: eefocus关键字:1602控制  MSP430 手机看文章 扫描二维码
随时随地手机看文章
  1. /***************************************************************** 
  2. //文件名   :1602.h 
  3. //描述        :该头文件定义与1602有关的各种接口、函数,适用于MSP430F149 
  4. //编写人   :小邪@清水 
  5. //版本号   :1.00 
  6. *****************************************************************/  
  7.   
  8. #include   
  9. #include "1602.h"  
  10. #define uchar unsigned char   
  11. #define uint unsigned int    
  12.   
  13. uchar NUM[] = {"0123456789."};  
  14.   
  15. /***************************************************************** 
  16. //关于1602的一些宏定义 
  17. //注意:除第三个外都要根据实际使用IO口更改 
  18. *****************************************************************/  
  19. #define DataDir     P4DIR  
  20. #define DataPort    P4OUT                 
  21. #define Busy        0x80  
  22. #define CtrlDir     P3DIR  
  23. #define CLR_RS      P3OUT&=~BIT0;                               //RS = P3.0   
  24. #define SET_RS      P3OUT|=BIT0;      
  25. #define CLR_RW      P3OUT&=~BIT1;                               //RW = P3.1  
  26. #define SET_RW      P3OUT|=BIT1;      
  27. #define CLR_EN      P3OUT&=~BIT2;                               //EN = P3.2   
  28. #define SET_EN      P3OUT|=BIT2;      
  29.   
  30. /************************************************************************* 
  31. //名称    : delay 
  32. //参数    : 无 
  33. //返回值:无 
  34. //功能    : 延时 5 ms的时间 
  35. *************************************************************************/  
  36. void Delay5ms(void)  
  37. {   
  38.     uint i=40000;  
  39.     while (i != 0)  
  40.     {  
  41.         i--;  
  42.     }  
  43. }  
  44.   
  45. /************************************************************************* 
  46. //名称    :WaitForEnable 
  47. //参数    :无  
  48. //返回值:无 
  49. //功能    :等待直到1602完成当前操作 
  50. *************************************************************************/  
  51. void WaitForEnable(void)   
  52. {  
  53.     P4DIR &= 0x00;  //将P4口切换为输入状态  
  54.   
  55.     CLR_RS;  
  56.     SET_RW;  
  57.     _NOP();  
  58.     SET_EN;   
  59.     _NOP();  
  60.     _NOP();  
  61.       
  62.     while((P4IN & Busy)!=0);  //检测忙标志  
  63.   
  64.     CLR_EN;  
  65.   
  66.     P4DIR |= 0xFF;  //将P4口切换为输出状态  
  67. }     
  68.   
  69. /************************************************************************* 
  70. //名称    :WriteCommand 
  71. //参数    :cmd--命令,chk--是否判忙的标志,1:判忙,0:不判 
  72. //返回值:无 
  73. //功能    :向1602写指令 
  74. *************************************************************************/  
  75. void WriteCommand(uchar cmd,uchar chk)   
  76. {  
  77.   
  78.     if (chk) WaitForEnable();   // 检测忙信号  
  79.       
  80.     CLR_RS;   
  81.     CLR_RW;   
  82.     _NOP();  
  83.   
  84.     DataPort = cmd;             //将命令字写入数据端口   
  85.     _NOP();                   
  86.       
  87.     SET_EN;                     //产生使能脉冲信号  
  88.     _NOP();  
  89.     _NOP();  
  90.     CLR_EN;           
  91. }  
  92.   
  93. /************************************************************************* 
  94. //名称    :WriteData 
  95. //参数    :unsigned char Data 
  96. //返回值:无 
  97. //功能    :向1602写入数据 
  98. *************************************************************************/  
  99. void WriteData( uchar data )   
  100. {  
  101.     WaitForEnable();        //等待液晶不忙  
  102.   
  103.     SET_RS;  
  104.     CLR_RW;   
  105.     _NOP();  
  106.   
  107.     DataPort = data;        //将显示数据写入数据端口  
  108.     _NOP();  
  109.   
  110.     SET_EN;                 //产生使能脉冲信号  
  111.     _NOP();   
  112.     _NOP();   
  113.     CLR_EN;       
  114. }  
  115.   [page]
  116. /************************************************************************* 
  117. //名称    :LocateXY 
  118. //参数    :unsigned char x,unsigned char y 
  119. //返回值:无 
  120. //功能    :确定1602写入数据的位置,X为行坐标,Y为列坐标(都从0开始) 
  121. *************************************************************************/  
  122. void LocateXY(uchar x,uchar y)   
  123. {  
  124.     uchar temp;  
  125.   
  126.     temp = x&0x0f;  
  127.     y &= 0x01;  
  128.     if(y)   temp |= 0x40;  //如果在第2行  
  129.     temp |= 0x80;  
  130.   
  131.     WriteCommand(temp,1);  
  132. }  
  133.   
  134. /************************************************************************* 
  135. //名称    :LcdInit 
  136. //参数    :无 
  137. //返回值:无 
  138. //功能    :1602初始化 
  139. *************************************************************************/  
  140. void LcdInit(void)   
  141. {  
  142.     CtrlDir |= 0x07;                 //控制线端口设为输出状态   
  143.     DataDir |= 0xFF;                 //数据端口设为输出状态  
  144.     
  145.     WriteCommand(0x38, 0);      //规定的复位操作  
  146.     Delay5ms();  
  147.     WriteCommand(0x38, 0);        
  148.     Delay5ms();  
  149.     WriteCommand(0x38, 0);  
  150.     Delay5ms();  
  151.   
  152.     WriteCommand(0x38, 1);      //显示模式设置  
  153.     WriteCommand(0x08, 1);      //显示关闭  
  154.     WriteCommand(0x01, 1);      //显示清屏  
  155.     WriteCommand(0x06, 1);      //写字符时整体不移动  
  156.     WriteCommand(0x0c, 1);      //显示开,不开游标,不闪烁  
  157. }  
  158.   
  159. /************************************************************************* 
  160. //名称    :WriteStr 
  161. //参数    :待写入数组的首地址,unsigned int n,unsigned char x,unsigned char y 
  162. //返回值:无 
  163. //功能    :在给定位置显示一个数组,长度为l 
  164. *************************************************************************/  
  165. void WriteStr(uchar *a,uint l,uchar x,uchar y)  
  166. {  
  167.     uchar i;  
  168.     LocateXY(x,y);  
  169.     for(i = 0;i < l;i ++)  
  170.         WriteData(a[i]);  
  171. }  
  172.   
  173. /************************************************************************* 
  174. //名称    :WriteNum 
  175. //参数    :待写入数字,unsigned char x,unsigned char y 
  176. //返回值:无 
  177. //功能    :在给定位置显示一个数字(不超过5位且小于65536) 
  178. *************************************************************************/  
  179. void WriteNum(uint n,uchar x,uchar y)  
  180. {  
  181.     uchar five,four,three,two,one;  
  182.     LocateXY(x,y);  
  183.     if((n >= 10000)&&(n <= 65535))  
  184.     {  
  185.         five = n / 10000;  
  186.         four = (n % 10000) / 1000;  
  187.         three = ((n - five * 10000) % 1000) / 100;  
  188.         two = ((n - five * 10000) % 1000 - three * 100 ) / 10;  
  189.         one = ((n - five * 10000) % 1000 - three * 100 ) % 10;  
  190.         WriteData(NUM[five]);  
  191.         WriteData(NUM[four]);  
  192.         WriteData(NUM[three]);  
  193.         WriteData(NUM[two]);  
  194.         WriteData(NUM[one]);  
  195.     }  
  196.     if((n >= 1000)&&(n <= 9999))  
  197.     {  
  198.         four = n / 1000;  
  199.         three = (n % 1000) / 100;  
  200.         two = (n % 1000 - three * 100 ) / 10;  
  201.         one = (n % 1000 - three * 100 ) % 10;  
  202.         WriteData(NUM[four]);  
  203.         WriteData(NUM[three]);  
  204.         WriteData(NUM[two]);  
  205.         WriteData(NUM[one]);  
  206.     }  
  207.     if((n >= 100)&&(n <= 999))  
  208.     {  
  209.         three = n / 100;  
  210.         two = (n - three * 100 ) / 10;  
  211.         one = (n - three * 100 ) % 10;  
  212.         WriteData(NUM[three]);  
  213.         WriteData(NUM[two]);  
  214.         WriteData(NUM[one]);  
  215.     }  
  216.     if((n >= 10)&&(n <= 99))  
  217.     {  
  218.         two = n / 10;  
  219.         one = n % 10;  
  220.         WriteData(NUM[two]);  
  221.         WriteData(NUM[one]);  
  222.     }  
  223.     if((n > 0)&&(n <= 9))WriteData(NUM[n]);  
  224. }  
  225.   
  226. /************************************************************************* 
  227. //名称    :WriteFloat 
  228. //参数    :待写入浮点数,unsigned char x,unsigned char y 
  229. //返回值:无 
  230. //功能    :在给定位置显示一个浮点数(整数部分和小数部分都不超过两位) 
  231. *************************************************************************/  
  232. void WriteFloat(float n,uchar x,uchar y)  
  233. {  
  234.     uint Integer,Decimal;                                           //Integer用于存放整数部分,Decimal用于存放小数部分  
  235.     Integer = (uint)(n/1);  
  236.     Decimal = (uint)(n * 100 - Integer * 100);  
  237.     WriteNum(Integer,x,y);  
  238.     WriteData(NUM[10]);  
  239.     WriteNum(Decimal,x+3,y);  
  240. }  
  241.  

关键字:1602控制  MSP430 引用地址:1602控制forMSP430

上一篇:12864控制forMSP430
下一篇:矩阵键盘控制forMSP430

推荐阅读最新更新时间:2024-03-16 14:32

电设工作小结之——MSP430G2553学习笔记——3
接上一篇继续: 二,MSP430G2553的应用设计 (一),频率计的设计 1,频率计的实现方法有:测频法,测周法,等精度测频。一般是低频用测周法较准,高频用测频法较准。等精度测频是比较准的。 2,测周法: (1)可以使用定时器的输入捕获功能,捕获上升沿或下降沿,然后就可以计算出信号的周期,从而得出频率。 (2)也可以把待测信号接到IO上,然后用无限循环不停的查询电平的高低,从而得出信号的周期。丁老师建议:以丁老师的经验,这种方法测量的精度比用捕获中断的精度要高,因为中断的进入和退出都要占用时间。 (3)但这种侧周法适用于低频信号频率的测量,对于高频信号精度不好。 3,测频法: (1)可以定时一定的时间,然后计算
[单片机]
基于MSP430单片机的无线充电器设计
   引言   目前,手机、MP3和笔记本 电脑等便携式电子设备进行充电主要采用的是一端连 接交流电源,另一端连接便携式电子设备充电电池的传统充电方式。这种方式有很多不利 的地方,如频繁的插拔很容易损坏接头,也可能带来触电的危险等。因此,非接触式感应充电器在上个世纪末期诞生。凭借其携带方便、成本低、无需布线等优势迅速受到各界关注。实现无线充电,能量传输效率高,便于携带成为充电系统的研究方向之一 。本设计就是一个由能量发送单元和能量接收单元两大部分组成,利用电磁感应原理 实现电能无线传递的充电器。    1 硬件系统设计   1.1 器件选择   本无线充电系统的设计是用线圈耦合方式传递能量,使接收单元接收到足够的电能,以保证
[电源管理]
基于<font color='red'>MSP430</font>单片机的无线充电器设计
疯壳MSP430实验教程1.GPIO实验
GPIO硬件介绍 MSP430F5438A单片机属于5系列单片机,该系列的单片机最多可以提供12路数字IO接口,P1~P11以及PJ。大部分接口都有8个管脚,但是有些接口会少于 8 个管脚。可以参考说明文档中关于接口的章节。每个 I/O 管脚都可以独立的设置为输入或者输出方向,并且每个 I/O 接线都可以被独立的读取或者写入。所有接口的寄存器都可以被独立的置位或者清零,就像设置驱动能力一样。 P1和P2接口具中断功能。从P1和P2接口的各个I/O管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿出发中断。所有的P1接口的I/O管脚的中断都来源于同一个中断向量P1IV,并且P2接口的中断都来源于另外一个中断向量P2IV。在
[单片机]
疯壳<font color='red'>MSP430</font>实验教程1.GPIO实验
msp430学习笔记之定时器A
1 相关知识 1 定时器a图解 图 1 定时器A图解 2 定时器A的四种计数模式 1. 停止模式。 2. 增计数模式。(产生两个中断标志) 当计数到跟TACCR0一样的时候,就返回0,重新计数。当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中断标志TAIFG。如图: 图 2 增计数模式的时序图 3.连续计数模式(产生一个中断标志) 计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。返回零的同时产生一个TAIFG中断标志。如图 图3 连续技术模式的时序图 如果相应中断位允许,每当一个定时间隔到都会产生中断请求,在连续计数模
[单片机]
MSP430中的SD16模块
Datesheet中的英文看着不爽,突然发现了利尔达430演讲资料中的SD16模块介绍,还有MSP430FE42X中文参考手册,总结下方便学习,先来结构图。 SD16结构图 SD16CTL,ADC控制寄存器 ReservedBit 0 保留,读出总是0。 OVIE Bit 1溢出中断使能,溢出中断矢量独立使能。 若一个转换结果写进ADC存储器SD16MEMx,但前一结果还未读,发生溢出。 REFONBit 2接通内部参考电压,如果不用参考应该关闭以节约能源。 0:内部参考关闭。 如果使用ADC,参考电压必须有外部供给,否则转换结果不可预知。 1:内部参考电压接通。 注意VREF引脚需要连接一个
[单片机]
<font color='red'>MSP430</font>中的SD16模块
MSP430F249SPI+TLC549
/****************************************************************** ** ** File : SPI.c | TLC549 | ** Version : 1.0 ** Description : SPI interface TLC549 ** Author : LightWu ** Date : 2013-4-15
[单片机]
低功耗MSP430单片机 在3V与5V混合系统中的逻辑接口技术
MSP430超低功耗微处理器是TI公司推出的一种新型单片机。它具有16位精简指令结构,内含12位快速ADC/Slope ADC,内含60K字节FLASH ROM,2K字节RAM,片内资源丰富,有ADC、PWM、若干TIME、串行口、WATCHDOG、比较器、模拟信号,有多种省电模式,功耗特别小,一颗电池可工作10年。开发简单,仿真器价格低廉,不需昂贵的编程器。 MSP430其特点有:1.8V~3.6V低电压供电;高效16位RISC CPU可以确保任务的快速执行,缩短了工作时间,大多数指令可以在一个时钟周期里完成;6微秒的快速启动时间可以延长待机时间并使启动更加迅速,降低了电池的功耗。MSP430产品系列可以提供多种存储器选
[单片机]
低功耗<font color='red'>MSP430</font>单片机 在3V与5V混合系统中的逻辑接口技术
基于GPSOne模块DTGS-800和MSP430F147的设计
  GPSOne综合了GPS、CDMAlX(码分多址分组数据交换网络)、GIS(地理信息系统)和互联网技术,是美国高通公司为基于位置业务而开发的定位技术,采用Client/Server方式。它将无线辅助A-GPS和高级前向链路AFLT三角定位技术有机结合,实现高精度、高可用性和较高速度的定位。在A-GPS定位技术无法使用的环境中,会自动切换到AFLT三角定位技术,确保定位的成功率和精确度。这里基于GPSOne模块DTGS-800和低功耗单片机MSP430设计并实现了具有定位、监控和报警功能的个人定位终端。   1 系统硬件设计      个人定位终端的硬件组成如图1所示。为了解决GPS在室内和高层建筑密集区难以定位的问题
[单片机]
基于GPSOne模块DTGS-800和<font color='red'>MSP430</font>F147的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved