历史上的今天
返回首页

历史上的今天

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

2018年01月30日 | MSP430单片机步进电机带显示程序

2018-01-30 来源:eefocus

MSP430 单片机 步进电机带显示程序


#include "msp430x22x4.h" 
#define uchar unsigned char 
#define uint  unsigned int 

#define comm  0

#define dat   1 
#define sclk_1   P4OUT|=0x01         //sclk=1;  001----p4.0 
#define sclk_0   P4OUT&=0x06         //sclk=0;  110----p4.1 
#define std_1    P4OUT|=0x02         //std =1;  010 
#define std_0    P4OUT&=0x05         //std =0;  101 

#define keyin   (P2IN&0x0F) 

unsigned char key[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}; 

uchar hang[]={0xef,0xdf,0xbf,0x7f};// 选中行码 
uchar lie[]={0x0e,0x0d,0x0b,0x07};//相应列值 
unsigned char save,aa,bb; 
uchar m=1,j=0; 
uchar M=0,key1=0,key2=0; 
uchar flag_key1=0,flag_key2=0,flag_go=0; 
float nquan=0x00; 



uchar caidan[]={ 
  "Please Input M  " 
  "电机转动      度"  
  " M=             " 
  "****************" 
   
}; 

uchar caidan1[]={"0123456789."}; 

// 扫描式4x4键盘 
void delay(uint aj)   //us 

   
    while(aj--); 


void DELAY(uint aj)   //ms 

  for(uint fl=0;fl<1000;fl++) 
    while(aj--); 

   
void init_port(void) 

   
  P2DIR=0XF0; 
  P2SEL=0; 
  P2OUT=0; 
  P2IE=0X0F; 
  P2IES=0XF0; 
  P2IFG=0; 
   
  P3DIR=0XFF;   //p3.0--A P3.1---B  P3.2---C   P3.3---D 
  P3SEL=0X00; 
  P3OUT=0X00; 
   
  P4DIR=0XFF;   //P4口输出 作液晶接口p4.0--SCK p4.1---sid 
  P4SEL=0; 
  P4OUT=0; 
  
  _EINT(); 
   
  return; 



/* 
******************************************************************************** 
*模块名称:wr_LCD定义 
*完成日期:08-07-29 
*修改内容:none 
********************************************************************************/ 
//********写命令/数据*************************************************** 
void wr_lcd (unsigned char dat_comm,unsigned char content) 

  unsigned char a,b,i,j; 
  delay (50); 
  a=content; 
    //cs_1;      
    sclk_0;      
    std_0;         
    std_1;          
  for(i=0;i<5;i++)   
  { sclk_1;sclk_0;} 
     std_0; 
     sclk_1; 
     sclk_0; 
  if(dat_comm)std_1; 

  else 
    std_0; 
  sclk_1; 
  sclk_0; 
  std_0; 
  sclk_1; 
  sclk_0; 
  for(j=0;j<2;j++) 
  { 
    for(i=0;i<4;i++) 
    {b=a;       
      if((b&=0x80)==0) 
      {std_0;a=a<<1;} 
      else 
      {std_1;a=a<<1;} 
      sclk_1;sclk_0; 
    } 
    std_0; 
    for(i=0;i<4;i++) 
    { sclk_1;sclk_0;} 
  } 

/********************************************************************************* 
*模块名称:初始化定义 
*完成日期:08-7-29 
*修改内容:none 
******************************************************************************** 
*/ 
void init_lcd (void) 

  wr_lcd (comm,0x30);  /*30---基本指令动作*/    
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/ 
  delay (100); 
  wr_lcd (comm,0x06);  /*光标的移动方向*/ 
  wr_lcd (comm,0x0c);  /*开显示,关游标*/ 


/* 
******************************************************************************** 
*模块名称:清DDRAM定义 
*完成日期:08-7-29 
*修改内容:none 
******************************************************************************** 
*/ 
void clrram (void) 

  wr_lcd (comm,0x30); 
  wr_lcd (comm,0x01); 
  delay (180); 


/* 
******************************************************************************** 
*模块名称:显示汉字或字符定义 
*完成日期:08-7-29 
*修改内容:none 
******************************************************************************** 
*/ 
void chn_disp(unsigned char *chn) 

  unsigned char i; 
  wr_lcd (comm,0x30); 
  wr_lcd (comm,0x80); 
   
  for (i=0;i<64;i++) 
    wr_lcd (dat,chn[i]); 


//****************lcd_mesg定点显示*********************************** 
void  lcd_mesg(uint gao,uchar p,uchar q,uchar w) 

  uint adder1,adder2,adder3,adder4; 
  adder1=gao/1000,gao=gao-adder1*1000; 
  adder2=gao/100,gao=gao-adder2*100; 
  adder3=gao/10,adder4=gao%10; 

  wr_lcd(comm,p); 
      wr_lcd(dat,caidan1[adder1]);delay(20); 
      wr_lcd(dat,caidan1[adder2]);delay(20); 
  wr_lcd(comm,q); 
      wr_lcd(dat,caidan1[adder3]);delay(20); 
      wr_lcd(dat,caidan1[10]);delay(20); 
   wr_lcd(comm,w);    
      wr_lcd(dat,caidan1[adder4]);delay(20); 
      wr_lcd(dat,caidan1[0]);delay(20); 


void  lcd_mesg1(uint gao,uchar p) 

  uint adder1,adder2; 
adder1=gao/10,adder2=gao%10; 
 wr_lcd(comm,p); 
      wr_lcd(dat,caidan1[adder1]);delay(20); 
      wr_lcd(dat,caidan1[adder2]);delay(20); 


void  lcd_mesg2(uchar gao,uchar di,uchar p) 

  wr_lcd(comm,p); 
      wr_lcd(dat,caidan1[gao]);delay(20); 
      wr_lcd(dat,caidan1[di]);delay(20); 

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

void keyprocess(void) 
{  
   
       for(aa=0;aa<4;aa++) 
       { 
           P2OUT=hang[aa];       //逐行扫描 
            if(keyin != 0x0f)break;//检测该行有键按下则退出循环 
       } 
             
       for(bb=0;bb<4;bb++)     //逐列扫描 
       { 
         if(keyin==lie[bb]) 
         { 
           save=key[aa][bb];break;        //检测该列有键按下则退出循环 
         } 
       } 
        
        
switch(save) 
       { 
 case 0: 
    if(flag_key1==1) 
         {key1=0,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=0,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break; 
          
  case 1: 
    if(flag_key1==1) 
         {key1=1,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=1,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;        
  case 2: 
    if(flag_key1==1) 
         {key1=2,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=2,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break; 
     
     case 3: 
    if(flag_key1==1) 
         {key1=3,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=3,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;      
          
      case 4: 
    if(flag_key1==1) 
         {key1=4,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=4,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;     
          
       case 5: 
    if(flag_key1==1) 
         {key1=5,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=5,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;    
     
        case 6: 
    if(flag_key1==1) 
         {key1=6,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=6,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;   
          
        case 7: 
    if(flag_key1==1) 
         {key1=7,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=7,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;   
     
        case 8: 
    if(flag_key1==1) 
         {key1=8,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=8,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break;   
     
     case 9: 
    if(flag_key1==1) 
         {key1=9,flag_key1=0;lcd_mesg2(key1,key2,0x92);} 
    if(flag_key2==1) 
         {key2=9,flag_key2=0;lcd_mesg2(key1,key2,0x92);}     
            break; 
          
   case 12:flag_key1=1;break; 
   case 13:flag_key2=1;break; 
   case 14:flag_go=1;break; 
  
       case 10: 
       case 11: 
       case 15:break; 
       }     
        
    return; 
       } 

#pragma vector = PORT2_VECTOR  
__interrupt void PORT_ISR(void)       
       
 {  
  keyprocess(); 
  P2IFG=0; 
  P2OUT = 0; 
   return; 
 } 

void main(void) 

  WDTCTL=WDTPW+WDTHOLD;                   //关看门狗 
  BCSCTL1 =CALBC1_1MHz;                   //设定DCO为1MHZ 
  DCOCTL =CALBC1_1MHZ;      
   
  init_port(); 
  init_lcd(); 
  chn_disp(caidan); 
  while(1){ 
  while((key1|key2==0)&&(flag_go==0)); 
  key1=key1*10; 
  M=key1+key2; 
  nquan=50/M*72; 
  lcd_mesg(nquan,0x8c,0x8d,0x8e);delay(10);//显示转动度数 
   
 for(;j<50/M;j++)    // 双8拍  j=50刚好一圈360 最小度数为7.2度---j=1 
  { 
     P3OUT=0X03;//AB 
      delay(420); 
      P3OUT=0X07;//ABC 
      delay(420); 
      P3OUT=0X06;//BC 
      delay(420); 
       P3OUT=0X0E;//BCD 
      delay(420); 
      P3OUT=0X0c;//CD 
      delay(420);       
       P3OUT=0X0D;//CDA 
      delay(420); 
      P3OUT=0X09;//DA 
      delay(420); 
      P3OUT=0X0B;//DAB 
      delay(420); 
  } 
  }} 


推荐阅读

史海拾趣

富满电子(FM)公司的发展小趣事

在电子行业中,富满电子(FM)公司的发展历程充满了创新与挑战,以下是五个与其发展紧密相关的事实性故事:

1. 市场需求驱动下的产能扩张

2016年至2017年间,随着智能手机等智能终端设备的出货量达到历史峰值,市场对芯片的需求急剧增加。富满电子抓住这一市场机遇,积极扩产以满足需求。这一时期的产能扩张不仅提升了公司的市场份额,也为其后续的技术研发和产品线拓展奠定了坚实基础。然而,随着市场需求的回落和行业内竞争加剧,富满电子也面临着产能过剩和价格下滑的挑战,这迫使公司更加注重技术创新和市场细分,以提升竞争力。

2. LED芯片设计领域的突破

富满电子早期主要从事电源管理芯片的设计与生产,但受限于完全竞争的市场环境和欧美企业的技术垄断,公司在该领域的发展空间有限。为了寻找新的增长点,富满电子将目光投向了LED芯片设计领域。通过不断的技术研发和产品创新,富满电子成功推出了多款应用于显示屏和通用照明等中低端市场的LED芯片产品。尽管面临激烈的市场竞争,但富满电子凭借其高性价比的产品逐渐在市场中占据了一席之地。

3. 电源管理芯片的多元化布局

在电源管理芯片领域,富满电子不仅继续深耕传统市场,还前瞻性地布局了快充等新兴市场。公司推出的USBPD系列芯片在快充市场展现了良好的先发优势,并逐渐获得市场的认可。此外,富满电子还通过“协议芯片+MOS+ACDC”模块化解决方案的推出,进一步提升了其在电源管理芯片市场的竞争力。这一多元化布局不仅为公司带来了新的增长点,也增强了其在行业内的整体实力。

4. 射频业务的拓展与前瞻布局

为了应对5G时代的到来,富满电子在2020年设立了射频公司,并开始布局5G射频开关、射频滤波器等产品的研发与生产。这一举措不仅展现了公司在技术前瞻性和市场敏感度方面的优势,也为其在未来无线通信领域的竞争中赢得了先机。通过不断的技术积累和市场拓展,富满电子有望在5G射频领域实现新的突破和发展。

5. 应对市场质疑与财务稳健发展

近年来,富满电子也面临过一些市场质疑和负面消息的影响,如被举报做假账等。然而,公司始终坚持以事实为依据,通过法律手段积极回应并澄清相关指控。同时,富满电子在财务管理上也保持了稳健的态度,严格按照相关法律法规进行会计核算和财务信息披露。这些措施不仅维护了公司的声誉和形象,也为其在复杂多变的市场环境中保持稳健发展提供了有力保障。

GREEGOO公司的发展小趣事
时钟信号线应避免靠近输出端口,以防止高频时钟信号耦合到输出端口。
Cogent_Computer_Systems公司的发展小趣事

在电子行业的发展过程中,Cogent_Computer_Systems公司深知合作共赢的重要性。公司积极与上下游企业建立紧密的合作关系,共同推动产业升级。通过与供应商的深度合作,公司确保了原材料的稳定供应和质量保障;同时,与客户的紧密沟通也帮助公司更好地把握市场需求,推出更符合消费者期望的产品。这种合作共赢的模式不仅提升了公司的竞争力,也为整个电子行业的发展注入了新的活力。

ABLIC公司的发展小趣事

在“2018慕尼黑上海电子展”上,ABLIC展示了其即将推出的紫外传感器。这一产品的推出,彰显了ABLIC在传感器领域的创新能力。紫外传感器在环境监测、安全防护等领域具有广泛应用前景。ABLIC凭借其在半导体技术方面的深厚积累,成功研发出具有高性能和稳定性的紫外传感器,为市场带来了新的选择。

AUSTIN公司的发展小趣事

在合并与合作的背景下,奥斯汀汽车开始注重产品创新和多样化。公司不断推出新的车型,以满足不同消费者的需求。例如,奥斯汀A40和A50等车型在市场上取得了不错的销量。同时,奥斯汀汽车还注重技术研发和创新,不断提升产品的性能和品质。

上海国芯(Gcore)公司的发展小趣事
使用示波器或逻辑分析仪测试555定时器的输出波形和频率是否正常。

问答坊 | AI 解惑

电工应用识图

大家一起努力! http://www.abab123.com/bbs/down.asp?html=1033626…

查看全部问答>

ENC03系列各种传感器资料

ENC03系列各种传感器资料…

查看全部问答>

铁路装备行业有前途吗?

俺目前是在工业节能行业从事装备制造研发设计,发现这个行业前景不是太妙。想换到铁路装备行业,有XDJM在铁路装备行业吗?给我一点意见,谢了。…

查看全部问答>

SOT23-6

SOT23-6封装,2脚接地,5脚接3.3V电压,1脚好像输出,3.4脚连在一起,6脚好像是信号输入。有谁知道这个什么芯片啊…

查看全部问答>

关于ARM7 LPC2368无操作系统移植TCP/IP协议栈,八百里加急!!!

我刚刚接触嵌入式编程不久 最近接手一个项目要求无操作系统移植一个TCP/IP协议栈,任务比较急 开始我打算移植LwIP,但是过程中遇到了许多问题无法解决 现在正在试图移植 nichelite的TCP/IP协议栈, 因为nichelite LPC23xx系列的程序针对8389芯片编 ...…

查看全部问答>

wince支持imgdecmp.dll吗?

如题!不是ppc呀...我做了个程序,编译没问题,用的是voimage,但运行的时候就说少组件???这是为什么呀???难道wince不支持imgdecmp+voimage????只能ppc里面用??? 那wince用什么浏览图片???…

查看全部问答>

J-link 出现target vcc failure .please check target voltage.failed to connect

J-link 出现target vcc failure .please check target voltage.failed to connect我是笔记本电脑,用的开发板是mini2440。在看国嵌体验入门班-1-5(软硬件环境搭建) 视频教程根据视频教程的步骤,我装好了J-Flash ARM V4.08l,并连接好J-link跟开 ...…

查看全部问答>

汽车传感器类型及其基础知识

  汽车传感器类型比较多,像我们一般碰到的汽车传感器一般有:温度传感器(冷却水温度传感器THW,进气温度传感器THA);流量传感器(空气流量传感器,燃油流量传感器);进气压力传感器MAP;节气门位置传感器TPS;发动机转速传感器;车速传感器SPD;曲轴 ...…

查看全部问答>

看!面试时多说一下专业术语多么重要性!

面试主管:你对电脑懂多少? 应征者:懂一点,我戴过电子表,玩过任天堂,房间有一台电视。。。。还有,我看过同学用DOS开机,两次.... 面试主管:下一位! (第二位应征者进入) 面试主管:你对电脑懂多少? 应征者:嗯,那要看是哪一种电脑 ...…

查看全部问答>

stm8和电脑USB接口的问题

在使用stm8时,出现了2个类似奇怪的现象(在2台电脑上使用):(电脑)1,stm8的电源指示灯突然熄灭,电脑突然关机,导致3个USB接口全部坏掉,最后判定为主板坏了。(电脑)2,stm8的电源指示灯突然熄灭,电脑突然关机,无法重启,最后拔掉电池才能 ...…

查看全部问答>