?? main-last.c
字號:
#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 + -