历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2020年02月15日 | MSP4301602显示Ⅰ

2020-02-15 来源:eefocus

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

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 keyin   (P1IN & 0xf0)



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输入模式,外部电路已接上拉电阻

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);

}

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

// 按键检测

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

void keyscan()

{

  if(keyin != 0xf0)

  {

      delay_ms(50);

      if(keyin != 0xf0)

      {

        temp = keyin;

        while(keyin != 0xf0);

        if(temp==0xe0)

        {

          P2OUT |= BIT0;

          keynum++;

          switch(keynum)

          {

          case 1:

            _DINT();

            LCD_write_com(0xc0+9);

            LCD_write_com(0x0f);

          case 2:

            LCD_write_com(0xc0+6);break;

          case 3:

            LCD_write_com(0xc0+3);break; 

          case 4:

            keynum = 0;

            LCD_write_com(0x0c);

          }

        }

        if(temp==0xd0)

        {

          switch(keynum)

          {

          case 1:

            miao++;

            if(miao==60)miao=0;

            LCD_write_sfm(8,miao);

            LCD_write_com(0xc0+9);

            break;

          case 2:

            fen++;

            if(fen==60)fen=0;

            LCD_write_sfm(5,fen);

            LCD_write_com(0xc0+6);

          case 3:

            shi++;

            if(shi==24)shi=0;

            LCD_write_sfm(3,shi);

            LCD_write_com(0xc0+4);  

          }

        }

        if(temp==0xb0)

        {

          switch(keynum)

          {

          case 1:

            miao--;

            if(miao==-1)miao=59;

            LCD_write_sfm(8,miao);

            LCD_write_com(0xc0+9);

            break;

          case 2:

            fen--;

            if(fen==-1)fen=59;

            LCD_write_sfm(5,fen);

            LCD_write_com(0xc0+6);

          case 3:

            shi--;

            if(shi==-1)shi=23;

            LCD_write_sfm(3,shi);

            LCD_write_com(0xc0+4);  

推荐阅读

史海拾趣

Alpha Wire公司的发展小趣事

Alpha Wire公司是一家在电子行业中知名的制造商,专注于生产高性能电线、电缆和线束。虽然我无法提供准确的发展故事,但我可以向你介绍一些关于Alpha Wire公司的背景和其在行业中的重要性。

  1. 公司成立:Alpha Wire公司成立于1922年,总部位于美国新泽西州。创始人是一位名叫韦尔纳·布雷德的工程师,他创立了Alpha Wire公司,旨在为不同领域的电子设备提供高质量的电线和电缆。

  2. 技术创新:Alpha Wire公司在其发展历程中一直致力于技术创新和产品质量的提升。公司不断投资于研发,并采用最新的材料和生产工艺,以确保其产品在性能和可靠性方面处于行业领先地位。

  3. 产品线扩展:随着时间的推移,Alpha Wire公司不断扩展其产品线,以满足不断变化的市场需求。除了标准的电线和电缆产品外,公司还开发了各种特种电线和线束,如耐高温、耐化学腐蚀、防火等特性的产品,以满足不同行业和应用的需求。

  4. 全球市场拓展:Alpha Wire公司在其发展过程中不断拓展其市场份额,通过建立全球分销网络和合作伙伴关系,将其产品销往世界各地。公司不仅在北美市场占据重要地位,还在欧洲、亚洲和其他地区建立了业务和生产基地,以更好地服务全球客户。

  5. 质量和可靠性:作为一家具有悠久历史的公司,Alpha Wire始终将质量和可靠性视为其产品的核心竞争力。公司严格遵循国际标准和质量管理体系,对原材料进行严格筛选和检验,并采用先进的生产工艺和严格的质量控制程序,以确保产品的稳定性和一致性。

以上是关于Alpha Wire公司的一些基本信息,虽然我无法提供具体的发展故事,但希望这些信息能够帮助你了解该公司在电子行业中的重要性和影响力。

CDE [ CORNELL DUBILIER ELECTRONICS ]公司的发展小趣事

随着电子行业的快速发展,客户对电容器的需求日益多样化。CDE公司积极应对市场变化,致力于定制化电容器的研发与应用。公司利用数学建模和定制化的仿真App对电容器的设计进行微调,以满足不同客户的特定需求。这一举措不仅提升了CDE的市场竞争力,也为公司在定制化电容器领域树立了领先地位。

EICHHOFF公司的发展小趣事

随着全球化趋势的加强,EICHHOFF公司意识到必须加快国际化步伐以拓展更广阔的市场。XX年代初,公司开始在欧洲其他国家设立销售和服务机构,并逐步将业务拓展到亚洲和北美地区。为了更好地适应不同地区的市场需求和文化差异,EICHHOFF公司积极招聘本地人才,并加强与当地企业和机构的合作。

通过实施国际化战略,EICHHOFF公司的品牌影响力得到了显著提升,市场份额也不断扩大。同时,公司也积累了丰富的国际运营经验和管理经验,为未来的发展奠定了坚实基础。

ALLEN BRADLEY公司的发展小趣事

品质一直是EICHHOFF公司发展的核心竞争力。为了确保产品质量的稳定性和可靠性,公司建立了一套完善的质量管理体系,并持续进行改进和优化。从原材料采购到生产加工、从产品检测到售后服务,每一个环节都严格按照质量管理体系的要求进行。

此外,EICHHOFF公司还积极引入国际先进的品质管理工具和方法,如六西格玛、精益生产等,以进一步提高产品质量和生产效率。这些努力使得EICHHOFF的产品在行业中享有很高的声誉和信誉。

Floeth Electronic Ltd公司的发展小趣事

在电子行业的快速发展中,EICHHOFF公司始终保持着对技术创新的追求。XX年代,公司成功研发出了一款具有革命性意义的连接器产品,该产品凭借其独特的设计和卓越的性能,迅速在市场上获得了广泛认可。这一创新不仅为EICHHOFF带来了丰厚的利润,也进一步巩固了其在行业中的领先地位。

此后,EICHHOFF公司继续加大研发投入,不断推出具有竞争力的新产品。这些产品不仅在性能上有所提升,还在设计和功能上进行了创新,满足了客户日益增长的需求。

EPCOS/TDK公司的发展小趣事

EPCOS,全称爱普科斯(EPCOS AG),其历史可以追溯到1989年。当时,西门子松下有限公司(Siemens Matsushita Components)在德国慕尼黑成立,作为西门子与松下的合资公司,集中了两大电子巨头的优势资源。这家公司起初专注于电子元器件的研发与生产,凭借其卓越的技术和品质,迅速在市场中占得一席之地。经过数十年的发展,EPCOS逐渐壮大,产品线涵盖了电容器、电感器、电阻器等众多电子元器件,并在全球范围内建立了广泛的销售网络。

问答坊 | AI 解惑

基于FPGA的误码率测试仪的设计与实现

基于FPGA的误码率测试仪的设计与实现…

查看全部问答>

用不带USB功能的单片机自制USB扩展8路RS232

我没用过AVR,也没有做过USB驱动控制器,所以这个项目对我来说那是相当~~~神秘了。 这个项目本来的名字叫做AVR-CDC,非要用中文解释的话,那就是:用AVR实现USB通讯装备类协议。 他的优点是: 1、不需要专门定制的驱动程序,它使用的是Windows ...…

查看全部问答>

B题交流

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 大家发表下做B题的问题,大家一起解决  …

查看全部问答>

常用元器件的识别

本帖最后由 paulhyde 于 2014-9-15 08:59 编辑 一、电阻 电阻在电路中用“R”加数字表示,如:R1表示编号为1的电阻。电阻在电路中的主要作用为分流、限流、分压、偏置等。 1、参数识别:电阻的单位为欧姆(Ω),倍率单位有:千欧(KΩ),兆欧 ...…

查看全部问答>

关于RAM和flash的寻址区别问题

小弟有些不明白,在些flash时直接向一个地址写入数据,就和写RAM一样。如:         addr = (FPWV *)dest;         MEM_FLASH_ADDR1 = (FPW)0x00AA00AA;       ...…

查看全部问答>

谈谈 USB 开发的感受,[无驱动与有驱动]

其实利用USB与设备通信,PC机不一点要写驱动,例如直接利用CDC-ACM也可以实现数据传输,只需写个INF. 但为什么还是要自己在WDM中开发USB驱动呢? 看了下CDC文档,感觉好多情况下可以利用WINDOWS自带的一些API来写应用,为什么我们还要去写驱动呢. 大蛱 ...…

查看全部问答>

文件系统的问题,大家帮我看看吧

我做了一个ramdisk,然后试验一下具体如下 U-Boot 1.1.4 (Jan 13 2007 - 18:54:16)                                    & ...…

查看全部问答>

搞无线的看过来

有用nRF系列的芯片做无线的吗?留下联系方式,交流一下阿.我把我的留下了.qq:472230383…

查看全部问答>

菜鸟升级.....换什么单片机好?

小弟之前一直在用AT89S52,最近感觉资源不够了....想换个资源多点的,又怕太复杂了掌握不了....纠结啊....今天看了STC12C5A系列的,感觉好像不错,性价比挺高的,有没有了解的大虾指点一二,适不适合我这样的用啊,我现在对S52应该算是比较熟悉了, ...…

查看全部问答>

第一次用ST7LITEU05点亮LED,请大哥指点

A5口接LED,计划是低电平亮,可是示波器看A5脚电平长期高电位不变,下面是源代码,COSMIC C和STVD7平台,各位大哥帮忙看看哪里不对,谢谢啦。。。#include <io7flitus.h>#include <stdlib.h>/*----Define Bit  ...…

查看全部问答>