历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2018年01月30日 | MSP430单片机1602液晶显示程序

2018-01-30 来源:eefocus

MSP430 单片机 1602液晶显示程序

#include"msp430x22x4.h" 
#define   uint      unsigned int 
#define keyin    (P2IN&0x0f)


//硬件连接    P4  数据口    P3.7---E  P3.6---RW   P3.5----RS 
//P2低4位接键盘1*4    上拉电阻电源外接电源5V   公共端接电源负  注意电源和 单片机 共地 

unsigned char table0[]="BeiJing 2008-6";                                     
unsigned char table1[]="0123456789"; 
unsigned char table2[]=":"; 
unsigned char table3[]="wubin"; 
unsigned char a=0,b=0,c=0,d=0,e=0,f=0,j=0; 
unsigned char num,count=0;     

//**************延时*********************************** 
void delay(uint z) 

    uint t,y; 
    for(t=z;t>0;t--) 
        for(y=110;y>0;y--); 



//*******写命令***************************************** 
void write_com(unsigned char com) 

    P3OUT&=~BIT5;//作为RS选择端低电平有效 
    P4OUT=com; 
    delay(5); 
    P3OUT|=BIT7; 
    delay(5); 
    P3OUT&=~BIT7; 

//*******写数据*************************************************** 
void write_data(unsigned char date) 

    P3OUT|=BIT5;//作为RS选择端高电平有效劳 
    //P3OUT&=~RW;//作为RS选择端 
    P4OUT=date; 
    delay(5); 
    P3OUT|=BIT7;//作为E选择端=1; 
    delay(5); 
    P3OUT&=~BIT7; 



//********初始化****************************************** 
void init() 

     
       TACTL=TASSEL1+TACLR+MC_1+ID_3;         //定时器A时钟源为MCLK,并清TAR//启动定时器A为增计数模式 
       CCR0 =65535;                      //计数值为65535个ACLK周期 
       CCTL0|=CCIE; 

  P3DIR=0xff;//P3输出 作控制口 
  P3SEL=0; 
  P3OUT=0x00; 
   
  P3OUT&=~BIT7;//E 
  P3OUT&=~BIT5;//RS 

  P4DIR=0XFF;//P4输出 作数据口 
  P4SEL=0; 
  P4OUT=0X00; 

  P2DIR=0XF0;//P2低4位输入  作键盘输入 
  P2SEL=0; 
  P2OUT=0X00; 
  P2IE=0X0F; 
  P2IFG=0; 
  P2IES=0X00;      
    write_com(0x38);//显示模式设置 
    write_com(0x0c);//开显示,不显光标 
    write_com(0x06);//数据地址指针 
    write_com(0x01);//清屏 
    _BIS_SR(GIE);//两个开总中断的方法随便用哪一个 
         _EINT();// 


//*****************************add1********************************************// 
void addfen1(void) 

  c++; 
if(c>9)c=0;return; 

//*******************************************// 
void addfen2(void) 
{d++; 
if(d>5)d=0;return;} 
//*******************************************// 
void addshi1(void) 
{e++; 
if(e>9)e=0;return;} 
//*******************************************// 
void addshi2(void) 
{f++; 
if(f>2)f=0; 
if(f==2&&e==3) 
{f=e=0;} 
  return; 



//************显示函数1******************** 
display(unsigned char x,unsigned char *p,unsigned char q) 

  write_com(x); 
  delay(5); 
  write_data(p[q]); 
  return; 

//************显示函数2******************** 
display2(unsigned char x,unsigned char *p) 

  unsigned char y=0;      //y要给其初值0否则出乱码 
  write_com(x); 
  while(p[y]!=0x00) 
  { 
    write_data(p[y]);  
   y++; 
    delay(5); 
  } 


//*****************************定时中断函数*********************************************// 

  #pragma vector =TIMERA0_VECTOR          //ccr0中断服务 
__interrupt void ta1_isr(void) 

  count++; 
  CCTL0&=~CCIFG;  
  if(count!=2)return; 
  count=0; 
    a++; 
    if(a>9) 
    {a=0;b++; 
        if(b>5) 
        {b=0;c++; 
            if(c>9) 
                { 
                c=0;d++; 
                  if(d>5) 
                  {d=0;e++; 
              if(e>9) 
              { 
              e=0;f++; 
            if(f==2&&e==4) 
            { 
            a=b=c=d=e=f=0; 
            }      CCR0 =65535; 
        }      CCR0 =65535; 
    }      CCR0 =65535; 
}      CCR0 =65535; 
}      CCR0 =65535; 
}      CCR0 =65535; 


//*****************************按键中断函数*********************************************// 
  #pragma vector =PORT2_VECTOR           //p2中断服务 
__interrupt void anjian(void) 

      P2IFG=0;//清按键中断!!! 
      CCTL0&=~CCIE;//关定时中断不计时 
       switch(keyin) 
            { 
               case 0x0e:addfen1();break;                 
               case 0x0d:addfen2();break; 
               case 0x0b:addshi1();break;                 
               case 0x07:addshi2();break;                  
               default:break;                
            } 
       CCTL0|=CCIE;    //开定时中断 
      delay(50); 
      //return;  
       

//***************主函数**************************************************** 
void main() 

   WDTCTL=WDTPW+WDTHOLD;                 //关看门狗 
  BCSCTL1 =CALBC1_1MHz;                 //设定DCO为1MHZ 
  DCOCTL =CALBC1_1MHZ; 
  init();  
  display2(0x80+0x00,table0); 
  display2(0x80+0x40,table3); 
  for(;;){     
    display(0x80+0x48,table2,j);//分号   
    display(0x80+0x4b,table2,j);//分号    
    display(0x80+0x46,table1,f);//时 
    display(0x80+0x47,table1,e); 
    display(0x80+0x49,table1,d);//分 
    display(0x80+0x4a,table1,c); 
    display(0x80+0x4c,table1,b);//秒 
    display(0x80+0x4d,table1,a); 
  }} 


推荐阅读

史海拾趣

AZM [Arizona Microtek, Inc]公司的发展小趣事

在技术创新的基础上,AZM公司开始积极拓展市场。公司制定了详细的市场拓展计划,通过参加国际电子展会、建立销售网络、开展合作伙伴关系等多种方式,逐步打开了国内外市场。同时,AZM公司注重品牌建设,通过提升产品质量、优化客户服务、加强品牌宣传等手段,逐渐树立了良好的品牌形象。

DILABS公司的发展小趣事

随着公司规模的扩大,DILABS开始意识到品质控制的重要性。他们引进了先进的生产设备和管理系统,确保每一款产品的质量都达到行业最高标准。同时,DILABS还加大了品牌宣传力度,通过参加国际展会、发布技术白皮书等方式,逐步建立起公司在电子行业中的品牌形象。

ABOV(现代单片机)公司的发展小趣事

为了进一步扩大市场份额,DILABS开始寻求与国内外知名企业的战略合作。他们与多家大型电子制造商签订了长期供货协议,同时也积极与高校和研究机构合作,共同研发新技术、新产品。这些战略合作不仅为DILABS带来了更多的订单,也促进了公司在技术和管理方面的不断进步。

ESS [ESS Technology,Inc]公司的发展小趣事

ESS科技公司的创始人在1984年创建了这家位于美国加利福尼亚州的公司,起初专注于将音响压缩重建技术应用于电子音响图书和问候卡。然而,随着个人电脑的普及和多媒体市场的快速增长,ESS决定调整战略,全力发展个人电脑音频技术。1993年,ESS推出了其首批PC音频半导体产品ES488,这是一个12位的单声道音质硅片。随后,ESS不断推出新产品,如ES688,一个16位立体音质硅片,这些产品为ESS带来了可观的收益。1995年,ESS成功在美国纳斯达克上市,标志着公司进入了一个全新的发展阶段。

亿宝科技(CNIBAO)公司的发展小趣事

品质是亿宝科技的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把控。在一次客户反馈中,亿宝科技发现某批次产品存在细微的质量问题。公司立即启动紧急预案,召回所有相关产品并进行全面检查。经过一系列的改进措施,亿宝科技成功解决了问题,并赢得了客户的信任和好评。

DEWALT公司的发展小趣事

随着全球经济的不断发展和市场需求的不断增长,DEWALT公司开始积极拓展海外市场。公司在全球范围内设立了多个生产基地和销售网络,为不同地区的用户提供优质的产品和服务。同时,DEWALT还积极与全球知名的企业和品牌进行合作,共同推动电动工具行业的发展。在未来,DEWALT公司将继续致力于技术创新和产品拓展,为全球用户提供更加高效、耐用的电动工具产品。

问答坊 | AI 解惑

冒昧的问一些如何根据元件大小选取元件的封装形式的问题

各位达人,我在做PCB板的时候对于如何根据元件数值选取元件封装时感到很吃力,举个例子 1.在选取三极管的时候,什么时候选TO-92A,什么时候选TO-92B? 2.一个电容比如一个100N/250V的电容,选取的是RAD0.3,这个电压的要求是不是贴片难以达到, ...…

查看全部问答>

关于TCL自动化测试的问题

现在要测试的文件比如有test.c和test.h 我需要用TCL写一个自动化测试脚本,为test.c中的变量赋值并运行 请问这个脚本该如何写,最好能给个示例,谢谢…

查看全部问答>

MC55连接网络问题,高分

当做为服务端时,测试过程, AT^SICS=0,conType,GPRS0 OK AT^SICS=0,apn,cmnet OK AT^SISS=1,srvType,socket OK AT^SISS=1,conId,0 OK AT^SISS=1,address,\"socktcp://listener:1000\" OK AT^SISO=1 OK at^siso? ^SISO ...…

查看全部问答>

请问各位大侠SRAM与DRAM的区别?

请问各位大侠SRAM与DRAM的区别? 是不是DRAM比SRAM访问速度要快, 两个是不同的存储介质,会不会是内存的某一块是SRAM,另一块是DRAM,只是地址不一样? 请大侠指点指点!谢谢!…

查看全部问答>

模拟电路上下册

《模拟电路上下册》 …

查看全部问答>

嵌入式单片机安卓画板研发和培训,高薪包就业!

嵌入式单片机安卓画板研发和培训,高薪包就业! 改变人生轨迹 规划职业蓝图! ----信盈达成就您的高薪梦想!         技术顾问:欧阳老师15989362803,QQ:877037118     信盈达科技有限公司专业提供嵌入式Arm+Lin ...…

查看全部问答>

两块LPC800 miniKIT换有关MSP430的东东

本人有四块LPC800miniKIT 欲拿出两块LPC800miniKIT换有关MSP430的东东,如果价值比较高,可以再加上加别的开发板 …

查看全部问答>