MSP4301602显示Ⅱ

发布者:HarmonySpirit最新更新时间:2017-09-28 来源: eefocus关键字:MSP430  1602显示 手机看文章 扫描二维码
随时随地手机看文章

/******************************************************************** 

1602液晶显示 

********************************************************************/  

#include  

  

#define CPU_F ((double)8000000)   

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))   

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))   

  

#define uchar unsigned char  

#define uint  unsigned int  

#define ulong unsigned long  

  

#define P10 3  

#define P11 6  

#define P12 7  

  

#define RS_CLR  P3OUT &= ~(1 << P10)        //RS置低  

#define RS_SET  P3OUT |= (1 << P10)         //RS置高  

  

#define RW_CLR  P3OUT &= ~(1 << P11)        //RW置低  

#define RW_SET  P3OUT |= (1 << P11)         //RW置高  

  

#define EN_CLR  P3OUT &= ~(1 << P12)        //E置低  

#define EN_SET  P3OUT |= (1 << P12)         //E置高  

  

#define DataPort      P4OUT                 //P4口为数据口  

  

#define KeyPort         P1IN                              //独立键盘接在P14~P17  

#define LED             P2OUT                             //LED灯接在P2上  

  

uchar key;  

  

uchar temp,keynum = 0;  

int shi=23,fen=59,miao=58;  

//*************************************************************************  

//                    系统时钟初始化  

//*************************************************************************  

void Clock_Init()  

{  

  uchar i;  

  BCSCTL1&=~XT2OFF;                 //打开XT振荡器  

  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ  

  do{  

    IFG1&=~OFIFG;                   //清除震荡标志  

    for(i=0;i<100;i++)  

       _NOP();                      //延时等待  

  }  

  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待  

  IFG1&=~OFIFG;   

}  

//*************************************************************************  

//              MSP430内部看门狗初始化  

//*************************************************************************  

void WDT_Init()  

{  

   WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗  

}  

  

//*************************************************************************  

//          初始化IO口子程序  

//*************************************************************************  

void Port_init()  

{  

        P1SEL = 0x00;                   //P2普通IO功能  

        P1DIR = 0x0F;                   //P24~P27输入模式,外部电路已接上拉电阻  

        P2SEL = 0x00;                   //P5口普通IO功能  

        P2DIR = 0xFF;   

//        LED = 0X00;                     //P5口输出模式  

    P4SEL = 0x00;  

        P4DIR = 0xFF;  

        P3SEL = 0x00;  

        P3DIR|= BIT3 + BIT6 + BIT7;     //控制口设置为输出模式  

}  

  

//***********************************************************************  

//  显示屏命令写入函数  

//***********************************************************************  

  

  

void LCD_write_com(unsigned char com)   

{     

    RS_CLR;  

    RW_CLR;  

    EN_SET;  

    DataPort = com;                 //命令写入端口  

    delay_ms(5);  

    EN_CLR;  

}  

//***********************************************************************  

//  显示屏数据写入函数  

//***********************************************************************  

  

void LCD_write_data(unsigned char data)   

{  

    RS_SET;  

    RW_CLR;  

    EN_SET;  

    DataPort = data;                //数据写入端口  

    delay_ms(5);  

    EN_CLR;  

}  

//***********************************************************************  

//  显示屏清空显示  

//***********************************************************************  

  

void LCD_clear(void)   

{  

    LCD_write_com(0x01);            //清屏幕显示  

    delay_ms(5);  

}  

//***********************************************************************  

//  写入时分秒  

//***********************************************************************  

void LCD_write_sfm(uchar add,uchar dat)  

{  

  uchar a,b;  

  a = dat/10;  

  b = dat%10;  

  LCD_write_com(0xc0 + add);  

  LCD_write_data(a+0x30);  

  LCD_write_data(b+0x30);  

}  

  

//***********************************************************************  

//  显示屏字符串写入函数  

//***********************************************************************  

  

void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)   

{  

      

    if (y == 0)   

    {  

        LCD_write_com(0x80 + x);        //第一行显示  

    }  

    else   

    {  

        LCD_write_com(0xC0 + x);        //第二行显示  

    }  

      

    while (*s)   

    {  

        LCD_write_data( *s);  

        s ++;  

    }  

}  

//***********************************************************************  

//  显示屏单字符写入函数  

//***********************************************************************  

  

void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)   

{  

      

    if (y == 0)   

    {  

        LCD_write_com(0x80 + x);        //第一行显示  

    }  

    else   

    {  

        LCD_write_com(0xC0 + x);        //第二行显示  

    }  

      

    LCD_write_data( data);    

}  

//***********************************************************************  

//  显示屏初始化函数  

//***********************************************************************  

  

void LCD_init(void)   

{  

    LCD_write_com(0x38);        //显示模式设置    

    delay_ms(5);  

    LCD_write_com(0x08);        //显示关闭  

    delay_ms(5);  

    LCD_write_com(0x01);        //显示清屏  

    delay_ms(5);  

    LCD_write_com(0x06);        //显示光标移动设置  

    delay_ms(5);  

    LCD_write_com(0x0C);        //显示开及光标设置  

    delay_ms(5);  

}  

//***********************************************************************  

//  时钟显示  

//***********************************************************************  

void clock(void)  

{  

  miao++;  

  if(miao==60)  

  {  

    miao=0;  

    fen++;  

    if(fen==60)  

    {  

      fen=0;  

      shi++;  

      if(shi==24)  

      {  

        shi=0;  

      }  

      LCD_write_sfm(2,shi);  

    }   

    LCD_write_sfm(5,fen);  

  }  

  LCD_write_sfm(8,miao);  

}  

//***********************************************************************  

//  按键检测  

//***********************************************************************  

uchar Key_Scan(void)   

{  

  uchar key_check;  

  uchar key_checkin;  

  key_checkin=KeyPort;              //读取IO口状态,判断是否有键按下  

  key_checkin&= 0xF0;               //读取IO口状态,判断是否有键按下  

  if(key_checkin!=0xF0)             //IO口值发生变化则表示有键按下  

    {  

      delay_ms(20);                     //键盘消抖,延时20MS  

      key_checkin=KeyPort;  

      if(key_checkin!=0xF1)  

        {    

          key_check=KeyPort;  

          switch (key_check & 0xF0)  

            {  

              case 0xE0:key=1;break;  

              case 0xD0:key=2;break;  

              case 0xB0:key=3;break;  

              case 0x70:key=4;break;  

            }           

        }       

   }  

  return key;  

}   

//***********************************************************************  

//      主程序  

//***********************************************************************  

void main(void)  

{  

     WDT_Init();                         //看门狗设置  

//     Clock_Init();                       //系统时钟设置  

     Port_init();                        //系统初始化,设置IO口属性  

     delay_ms(100);                      //延时100ms  

     LCD_init();                         //液晶参数初始化设置  

     LCD_clear();                        //清屏  

            

     LCD_write_com(0xc0+4);  

     LCD_write_data(':');  

     LCD_write_com(0xc0+7);  

     LCD_write_data(':');  

     LCD_write_sfm(2,shi);   

     LCD_write_sfm(5,fen);  

     LCD_write_sfm(8,miao);  

       

     CCR0 = 32768;  

//     TACTL = TASSEL_2 +  MC_3; //+ MC1;  

     TACTL = TASSEL1 + TACLR + MC0 + ID_2;  

     CCTL0 |= CCIE;  

     _EINT();  

           

     while(1)  

     {  

      Key_Scan();                       //键盘扫描,看是否有按键按下  

      if(key != 0xff)                     //如果有按键按下,则显示该按键键值1~4  

        {           

      {  

            switch(key)  

              {  

            case 1: _DINT();break;  //给不同的键赋键值,键值1,亮1个LED灯D1  

                case 2: LED=0xCF;break;  //给不同的键赋键值,键值2,亮1个LED灯D2  

                case 3: LED=0xF8;break;  //给不同的键赋键值,键值3,亮2个LED灯D1.D2  

                case 4: LED=0xFF;break;  //给不同的键赋键值,键值4,亮0个LED灯  

//              default:_EINT();  

              }  

          }   

       }  

     }      

}  

  

#pragma vector=TIMERA0_VECTOR  

__interrupt void TimerA_ISR(void)  

{  

  clock();  

//  P2OUT ^= ~BIT0;  

//  CCR0 += 50000;  

}  


关键字:MSP430  1602显示 引用地址:MSP4301602显示Ⅱ

上一篇:MSP430 IIC通信
下一篇:MSP4301602显示Ⅰ

推荐阅读最新更新时间:2024-03-16 15:39

MSP430F169(三) ---- 使用UART实现PC与单片机的数据收发并在1602 液晶显示
本代码需要注意的细节 每次字符串的发送时间至少间隔三秒,发送的字符的数量最好在32个以内,防止数据接收不全。 本代码波特率的设置为1200.如果波特率设置过高,会出现数据接收不全的问题。我试过9600的波特率,会出现问题。读者可以自行修改代码,实现更高的传输速率。 有关的细节会在代码中说明 代码实现 主函数 #include msp430f169.h #include Config.h #include LCD.h #include Init.h #include UART.h //#include stdlib.h 本来想用全局指针来存储接收的数据 // 结果发现自己用不来....
[单片机]
分享MSP430用TB捕获脉宽问题与解决心得
============================================================================================================================= 硬件:单片机:MSP430F149 晶振:32K,8M 输入信号:通过无线接收到低电平10ms,高电平7.5ms, 输入口:P4.0(TB0) 要求:捕获低电平的脉宽 =============================================================================================================
[单片机]
MSP430按键中断Ⅱ
#include msp430f149.h typedef unsigned char uchar; typedef unsigned int uint; #define keyin (P1IN & 0X0F) #define wei_h P5OUT |= BIT5 #define wei_l P5OUT &= BIT5 #define duan_l P6OUT &= ~BIT6 #define duan_h P6OUT |= BIT6 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}
[单片机]
MSP430F5529 (三)统一时钟系统UCS-1
1、以后要配置时钟的地方到处都是。 2、打字好累,上传更累; 3、之后我会发布PDF版,有心的同学可以下载学习。 之前有一点漏说明了,先补充上 ***************************************************************还有一个模块时钟源:MODOSC,产生MODCLK时钟源信号,一般只为闪存控制模块和ADC12模块提供服务。 该模块不被使用时自动关闭,任何模块对该时钟源提出使用要求时,MODOSC无需被使能即可响应该请求。430F5529中MODCLK为5MHZ。 ********************************************************
[单片机]
<font color='red'>MSP430</font>F5529 (三)统一时钟系统UCS-1
温控程序部分报告——基于msp430g2553
Created on: 2012-9-14 Author: zhang bin 学习笔记 for msp430g2553 redesigned by zhang bin 2012-09-14 versions :12_09_01 All Rights Reserved 程序是整个系统中很重要的一个组成部分,它在硬件的基础上协调着整个系统各个硬件部分的一同工作,控制着整个温控系统的一举一动。软件的主要功能包括有: (1)传感器信号的采集、处理 (2)加热丝的PWM输出 (3)加热的温度和速度控制 (4)温控系统运行流程控制:程序初始化、温控的启动与结束、液晶显示模块控制 (5
[单片机]
MSP430F5438 看门狗实验
简介: 1,学会在定时器和看门狗模式下操作 WDT,了解 WDT 寄存器的配置 2,编程实现WDT 定时功能,WDT 时钟源来自 ACLK,且 ACLK 无失效来自 XT1 晶体 3,实现功能:250ms 定时,每 250ms LED1 亮灭交替闪烁 1,看门狗介绍 看门狗定时器是一个32位的定时器它可以作为看门狗或定时器使用所有F5XX系列的器件中都有增强型看门狗定时器—WDT_A。 什么是看门狗? 从字面的意思理解,看门狗帮我的系统看门,防止我的系统到处乱跑。在实际嵌入式系统中看门狗也是充当这个角色的。看门狗,简称WDT,很明显它实际上是一个定时器,就如同我们所讲的Timer_A3亦或是Timer_B7系统一样,
[单片机]
<font color='red'>MSP430</font>F5438 看门狗实验
msp430与TLC5620实现AD_DA
  刚刚弄了一个AD_DA的转换。拿来和大家分享一下。这个东西没有太多的使用价值,只是初学者的练手而已。   先说一下器件吧,话筒一个,LM324N放大器将一个,TDA2822音频放大器一个,扬声器一个(不要太大,耳麦上就可以),TLC5620与msp430学习板,电容、电阻自不用说。 框架图如下: 话筒 》LM324N 》msp430(ADC12) 》tlc5620 》TDA2822 》扬声器(输出) lM324N的电路图如下(由于没用PCB绘图,画的很难看,还请见谅) 关于TDA2822呢参照手册上的带你路途即可,这里不再画出。 下面是程序代码部分: //=====================
[单片机]
用<font color='red'>msp430</font>与TLC5620实现AD_DA
基于MSP430的新型自报式水文遥测终端机设计
水文遥测系统通常由终端机、中继站和中心站三部分组成。由于终端机是用来直接测量雨量、水位等水文数据,是整个遥测系统信息的来源,故其设计成为整个遥测系统的关键。遥测终端机一般处于河流上游或者湖泊边缘,分布分散,维护起来很不方便,需要长期工作在无人值守的环境中,并且往往无交流电源提供,需要靠太阳能浮充和免维护蓄电池供电,因此在终端机的设计过程中低功耗和高可靠性尤为重要。 现有的遥测终端机通常采用MCS51微控制器作为控制芯片并配以较多的模拟电路和逻辑门电路,其设计复杂,功耗和可靠性难以得到保证,所以很有必要利用新型的性能更高的器件来对终端机重新设计。TI公司的MSP430系列集成了大量的外围部件,是低工作电压、超低功耗、高性能的微控
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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