⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main-last.c

📁 这是单片机驱动液晶显示器12864和键盘的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <msp430x44x.h>
#define uchar unsigned char
#define uint unsigned int
#define bit0 BIT0
#define bit1 BIT1
#define bit2 BIT2
#define bit3 BIT3
#define bit4 BIT4
#define bit5 BIT5
#define bit6 BIT6
#define bit7 BIT7

#define rs   BIT0
#define rw   BIT1
#define en   BIT2
#define psb  BIT3

#define ok    15
#define set   14
#define left  13
#define right 12
#define up    11
#define down  10

#define clc_dis  0x01    //清屏
#define dis_on  0x0c    //显示开
#define you_on     0x0f    //游标就是有下划线,游标开,反白允许

void ini_sys(void);
void ini_lcd(void);
void check_busy(void);
void wrd(uchar dat);
void wrc(uchar cmd);
void delay (uchar n);
void ldelay(uchar n);
void led();   //led亮一下
void led_on();
void led_off();
uchar read_ac(void);   //读出地址计数器ac的值

void led_front_left();          //前左灯亮        p26
void led_front_right();         //前右灯亮        p25
void led_back_left();           //后左灯亮        p24
void led_back_right();          //后右灯亮        p23
void speaker();                 //蜂鸣器叫一声    p22



void dis_add_ch(uchar add,uchar h,uchar l);//显示汉字函数
void dis_add_en(uchar add,uchar dat1,uchar dat2);  //显示字符
void dis_add_num(uchar add,uint dat);  //显示数字



void dis_ch(uchar h,uchar l);//只显示汉字函数
void dis_en(uchar dat1,uchar dat2);  //只显示字符
void dis_num(uint dat);  //只显示数字
void dis_add_two_num(uchar add,uchar dat);//只显示两位数字
void dis_two_num(uchar dat);//只显示两位数字

void add(uchar h,uchar l);       //定位地址

unsigned char key_data();      //判断键值
unsigned char ask_key();        //判断是否有键按下
void key_deal(uchar keydata);                //键值处理


void page1();//正常显示
void page2();//时间设置页面
void page3();//速度设置页面

void motor_front(void);        //电机正转
void motor_back(void);         //电机反转
void motor_left(void);
void motor_right(void);
void motor_stop(void);       //电机停止
void motor_nturn (void);


uchar sed=0,min=0,hour=0;
uchar page=0;   //显示的当前页面页数
uchar motor_time=1;//小车运行时间
int RUNFLAG=0;                //电机驱动标志

//uchar xiu=0;    //标志能否修改  为0不能修改  为1可以修改
//uchar sudu=0;
uchar temp_time=0;//时间判断中间值
void main(void)
{
  int keydata;
//  int askkey;
//  int a;
  ini_sys();
  ini_lcd();
    
    //TA
    CCR0 = 600-1;                             // PWM Period
    CCTL1 = OUTMOD_7;                         // CCR1 reset/set
    CCR1 = 300;                               // CCR1 PWM duty cycle  back
    CCTL2 = OUTMOD_7;                         // CCR2 reset/set
    CCR2 = 300;                               // CCR2 PWM duty cycle   front
    TACTL = TASSEL_1 + MC_1;                  // ACLK, up mode
    

  //基本定时器设定
  BTCTL =BT_ADLY_1000;   //4ms中断一次

//  IE2 &=(~BTIE);//开中断 
  

  //允许总中断
  _EINT();	//允许总中断
  
  
  //欢迎界面
  page=0;
  wrc(clc_dis);
  keydata=key_data();
  dis_add_ch(0x91,0xce,0xf7);     //西南交通大学
  dis_add_ch(0x92,0xc4,0xcf);     //西南交通大学
  dis_add_ch(0x93,0xbd,0xbb);     //西南交通大学
  dis_add_ch(0x94,0xcd,0xa8);     //西南交通大学
  dis_add_ch(0x95,0xb4,0xf3);     //西南交通大学
  dis_add_ch(0x96,0xd1,0xa7);     //西南交通大学
  
  delay(200);
  dis_add_ch(0x9b,0xc7,0xeb);       //请
  dis_add_ch(0x9c,0xb0,0xb4);       //按
  dis_add_ch(0x9d,0x4f,0x4b);       //ok
  dis_add_ch(0x9e,0xbd,0xf8);       //进
  dis_add_ch(0x9f,0xc8,0xeb);       //入
  
  //显示当前页数
  wrc(0x98);
  wrd(0x30+page);
  while(keydata!=ok)
  {
    wrc(0x9d);
    wrc(you_on);
    keydata=key_data();
  }
  
  //显示第一页
  page1();
  
  
  P2DIR |=BIT2;
  P2OUT &=(~BIT2);

  //  xiu=1;      //默认能够修改
  while(1)
  {
  
    
    
    keydata=key_data();
    if(keydata<16)
    {
      key_deal(keydata);
      ldelay(200);
      ldelay(200);
    }
    
//    if(motor_time>0)
//    {
//      temp_time=min+motor_time;
//    }
    
    if(motor_time<=min)
    {
      led_on();
      motor_stop();
    }
    else
    {
        led_off();
        P5DIR &=0Xe3;
        /*
        P67 null
        P54 front yes 0   no  1
        p53 left  yes 1   no  0
        p52 right yes 1   no  0
        */
        RUNFLAG =(P5IN)&0X1c;  //再取出p6口的4,5,6位
        RUNFLAG =RUNFLAG>>2;    //p6右移四位
        RUNFLAG =RUNFLAG^BIT2;  //       

        
        switch(RUNFLAG)   //begin 
        {
            case 0:           //any no
            {
                motor_right();
//                motor_nturn ();
                motor_front();
                break;
            }
            case 1:           //right yes  other no
            {
                motor_left();
                led_front_left();          //前左灯亮        p26
//                speaker();                 //蜂鸣器叫一声    p22
                motor_front();
                break;
            }
            case 2:           //left yes    other no
            {
                motor_right();
                led_front_right();         //前右灯亮        p25
//                speaker();                 //蜂鸣器叫一声    p22
                motor_front();
                break;
            }
            case 3:           //left and right yes other no
            {
                motor_nturn();
//                speaker();                 //蜂鸣器叫一声    p22
                motor_front();
                break;
            }
            case 4:           //front yes other no
            {
                motor_left();
                led_back_left();           //后左灯亮        p24
                led_back_right();          //后右灯亮        p23
//                speaker();                 //蜂鸣器叫一声    p22
                motor_back();
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                break;
            }
            case 5:           //front and right yes  other no
            {
                motor_right();
                led_back_left();           //后左灯亮        p24
                led_back_right();          //后右灯亮        p23
//                speaker();                 //蜂鸣器叫一声    p22
                motor_back();
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                break;
            }
            case 6:           //left and front yes
            {
                motor_left();
                led_back_left();           //后左灯亮        p24
                led_back_right();          //后右灯亮        p23
//                speaker();                 //蜂鸣器叫一声    p22
                motor_back();
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                break;
            }
            case 7:           //left right and front yes other no
            {
                motor_left();
                led_back_left();           //后左灯亮        p24
                led_back_right();          //后右灯亮        p23
//                speaker();                 //蜂鸣器叫一声    p22
                motor_back();
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                ldelay(200);
                break;
            }
            default:        //get wrong information
            {
                motor_stop();
                break;
            }
        }
    }
  
/*
    keydata=key_data();
    if(keydata==set)
    {
      key_deal(keydata);
    }
    */
//    else
//    {
//      page1();
//    }
//    keydata=key_data();
//    page1();
   
  }
  
  
  
  

/*  
  wrc(clc_dis);
//显示半角字符
  wrc(0x80);
  delay(100);
  for(a=0;a<64;a++)
  {
      wrd(0x01);
  }
//显示半角字符完
*/

/*
  while(1)
  {
    askkey=ask_key();
    askkey=read_ac();
    if(askkey==0)
    {
      add(1,1);
      dis_ch(0xce,0xde);        //无键按下
//      dis_add_ch(0x80,0xce,0xde);
//      dis_add_ch(0x81,0xce,0xde);
    }
    else
    {
      keydata=key_data();
      switch(keydata)
      {
        ;
      }
//      add(1,1);
//      dis_num(keydata);
//      dis_add_num(0x80,keydata);
    }
  }
  */
//  led_on();
//  LPM0;

}




void motor_nturn (void)
{
    P1DIR |=BIT7;
    P1OUT &=(~BIT7);
    P1DIR |=BIT4;
    P1OUT &=(~BIT4);
}
void motor_right(void)
{
    P1DIR |=BIT7;
    P1OUT &=(~BIT7);
    P1DIR |=BIT4;
    P1OUT |=BIT4;
}
void motor_left(void)
{
    P1DIR |=BIT4;
    P1OUT &=(~BIT4);
    P1DIR |=BIT7;
    P1OUT |=BIT7;
}
void motor_back(void)         //电机反转
{
    
    P2DIR |=BIT0;
    P2SEL &=(~BIT0);
    P2OUT &=(~BIT0);
    P1DIR |= BIT2;                            // P1.2 output
    P1SEL |= BIT2;                            // P1.2 TA1 option
    delay(200);
    //CCR0 = 20;                             // PWM Period
//    CCTL1 = OUTMOD_7;                         // CCR1 reset/set
//    CCR1 = 10;                               // CCR1 PWM duty cycle
//    TACTL = TASSEL_2 + MC_1;                  // SMCLK, up mode
}
void motor_front(void)        //电机正转
{
    
    P1DIR |=BIT2;
    P1SEL &=(~BIT2);
    P1OUT &=(~BIT2);
    P2DIR |= BIT0;                            // P2.0 output
    P2SEL |= BIT0;                            // P2.0 TA2 option
/*    
    CCR0 = 10000;                             // PWM Period
    CCTL2 = OUTMOD_7;                         // CCR2 reset/set
    CCR2 = 1500;                               // CCR2 PWM duty cycle
    TACTL = TASSEL_2 + MC_1;                  // SMCLK, up mode
*/
}
void motor_stop(void)       //电机停止
{
    P1DIR |=BIT2;
    P1SEL &=(~BIT2);
    P1OUT &=(~BIT2);
    P2DIR |=BIT0;
    P2SEL &=(~BIT0);
    P2OUT &=(~BIT0);
    P1DIR |=BIT7;
    P1OUT &=(~BIT7);
    P1DIR |=BIT4;
    P1OUT &=(~BIT4);
}

void page1()
{
//    xiu=0;    //不能修改 要set一下才能修改
    page=1;
    IE2 |=BTIE;//开中断 
    wrc(clc_dis);
    wrc(dis_on);
    dis_add_ch(0x80,0xca,0xb1);       //时
    dis_add_ch(0x81,0xbc,0xe4);       //间
    dis_add_two_num(0x82,hour);
    dis_add_ch(0x83,0xa1,0xc3);       //:
    dis_add_two_num(0x84,min);
    dis_add_ch(0x85,0xa1,0xc3);       //:
    dis_add_two_num(0x86,sed);
    
//    设定小车运行时间
    dis_add_ch(0x90,0xc9,0xe8);
    dis_add_ch(0x91,0xb6,0xa8);
    dis_add_ch(0x92,0xca,0xb1);       //时
    dis_add_ch(0x93,0xbc,0xe4);       //间
    dis_add_two_num(0x94,motor_time);
    dis_add_ch(0x95,0xb7,0xd6);   //分
//    dis_add_ch(0x96,0xa3,0xe9);   //i
//    dis_add_ch(0x97,0xa3,0xee);   //n



/*
//    小车当前速度    
    dis_add_ch(0x88,0xb5,0xb0);
    dis_add_ch(0x89,0xc7,0xb0);
    dis_add_ch(0x8a,0xcb,0xd0);
    dis_add_ch(0x8b,0xb6,0xc0);
//    dis_add_ch(0x8c,)
    dis_add_ch(0x8d,0xa3,0xe0);   //m
    dis_add_ch(0x8e,0xa3,0xa0);   ///
    dis_add_ch(0x8f,0xa3,0xf0);   //s

//    dis_add_

//    小车设定速度
    dis_add_ch(0x98,0xc9,0xe0);
    dis_add_ch(0x99,0xb6,0xa0);
    dis_add_ch(0x9a,0xcb,0xd0);
    dis_add_ch(0x9b,0xb6,0xc0);
//    dis_add_ch(0x9c,);

    dis_add_ch(0x9d,0xa3,0xe0);   //m
    dis_add_ch(0x9e,0xa3,0xa0);   ///
    dis_add_ch(0x9f,0xa3,0xf0);   //s
    
//小车设定速度    
//    dis_add_ch()
//    dis_add_ch(0x90,)
*/
    //显示当前页数
    wrc(0x98);
    wrd(0x30+page);


}
void page2()
{
    page=2;
//    xiu=0;    //不能修改 要set一下才能修改
    wrc(clc_dis);
    IE2 &=(~BTIE);//关中断 
    
    //设定北京时间
    dis_add_ch(0x80,0xc7,0xeb);       //请
    dis_add_ch(0x81,0xc9,0xe8);
    dis_add_ch(0x82,0xb6,0xa8);
    dis_add_ch(0x83,0xca,0xb1);       //时
    dis_add_ch(0x84,0xbc,0xe4);       //间
    dis_add_two_num(0x90,hour);
    dis_add_ch(0x91,0xa1,0xc3);       //:
    dis_add_two_num(0x92,min);
    dis_add_ch(0x93,0xa1,0xc3);       //:
    dis_add_two_num(0x94,sed);
    
    
    //显示当前页数
    wrc(0x98);
    wrd(0x30+page);
}
void page3()
{
    page=3;
//    xiu=0;    //不能修改 要set一下才能修改
    wrc(clc_dis);
    
    //设定小车运行时间

    dis_add_ch(0x80,0xc7,0xeb);       //请
    dis_add_ch(0x81,0xc9,0xe8);
    dis_add_ch(0x82,0xb6,0xa8);
    dis_add_ch(0x83,0xd4,0xcb);       //运
    dis_add_ch(0x84,0xd0,0xd0);       //行
    dis_add_ch(0x85,0xca,0xb1);       //时
    dis_add_ch(0x86,0xbc,0xe4);       //间
    
    dis_add_two_num(0x90,motor_time);
//    dis_add_ch(0x99,0xa3,0xe0);   //m
    dis_add_ch(0x91,0xb7,0xd6);   //分
    
    /*
    dis_add_ch(0x80,0xc7,0xeb);       //请
    dis_add_ch(0x81,0xc9,0xe0);       //设
    dis_add_ch(0x82,0xb6,0xa0);       //定
//    dis_add_two_num(0x8b,hour);
    dis_add_ch(0x83,0xcb,0xd0);       //速
    dis_add_ch(0x84,0xb6,0xc0);       //度
//    dis_add_ch(0x8c,0xa1,0xc3);       //:

//    dis_add_two_num(0x90,sudu);

    dis_add_ch(0x91,0xa3,0xe0);       //m
    dis_add_ch(0x92,0xa3,0xa0);       ///
    dis_add_ch(0x93,0xa3,0xf0);       //s
    
        
//    dis_add_ch(0x8e,0xa1,0xc3);       //:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -