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

📄 cd_dir.c

📁 基于SPMC75F2413A的LCD驱动程式序, 使用128X64的液晶模块,包含有画线,画圆和BMP,字符串等显示处理,全部源码,完整的工程.愿对从事单片机开发的工程式师有用.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include"Display.H"
extern uint SPI_Data;
extern int K_A,K_B;
uint data_Temp[2];
uint Scan_Key(int a);
uint Scan_Keya(int a);
//****************************************************************************************************
// BCD转BIN程序
// 设计者: 牟联树
// 描  述: BCD转BIN程序
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
uint BCD_BIN(uint a)
{
    uint Temp = 0,Temp1;
    uint i;
    for(i=0;i<16;i++)
    {
        Temp = Temp>>1;
        if(a&0x0001) Temp+= 0x8000;
        a = a>>1;
        if(a&0x8000) a+=0xd000;
        if(a&0x0800) a+=0xfd00;
        Temp1 = a;
        if(a&0x0080) Temp1+=0x00d0;
        if(a&0x0008) Temp1+=0x00fd; 
        a = (a&0xff00)|(Temp1&0x00ff);
    }
    return(Temp);    
}
//****************************************************************************************************
// 人机交互界面驱动(机器人运行参数设置界面) uint Robot_LCD(int a,int c,struct Robot_xx *b)
// 设计者: 牟联树
// 描  述: 人机交互界
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
uint Robot_LCD(int a,int c,struct Robot_xx *b)
{
     LCD_Init(0);                        //清屏
     W_ASII_s(0,0,0,(void *)"Work mode");        //显示菜单选项
     W_Data_s(72,0,(*b).Work_Mode,0);    //显示当前参数
     W_ASII_s(0,1,0,(void *)"V_max");
     W_Data_s(72,1,(*b).V_max,0);        //显示当前参数
     W_ASII_s(0,2,0,(void *)"Run setup");
     W_Data_s(72,2,(*b).Top_S,0);        //显示当前参数
     W_ASII_s(0,3,0,(void *)"Time Err");
     W_Data_s(72,3,(*b).Time_Err,0);     //显示当前参数    
     W_ASII_s(0,4,0,(void *)"Nexit");
     W_ASII_s(0,5,0,(void *)"Back");
     W_ASII(120,a,'~'+1,0);              //显示游标
     W_Data_s(72,6,c,1);                 //显示设置的标志号
     return(0);     
}
//****************************************************************************************************
// 人机交互界面驱动(机器人运行参数组选择界面) uint Robot_LCD_a(int a)
// 设计者: 牟联树
// 描  述: 人机交互界
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
uint Robot_LCD_a(int a)
{
     LCD_Init(0);
     W_ASII_s(0,0,0,(void *)"Work Mode 1");
     W_ASII_s(0,1,0,(void *)"Work Mode 2");
     W_ASII_s(0,2,0,(void *)"Work Mode 3");
     W_ASII_s(0,3,0,(void *)"Work Mode 4");
     W_ASII_s(0,4,0,(void *)"Work Mode 5");
     W_ASII_s(0,5,0,(void *)"Work Mode 6");
     W_ASII_s(0,6,0,(void *)"Work Mode 7");
     W_ASII_s(0,7,0,(void *)"Work Mode 8");
     W_ASII(120,a,'~'+1,0);
     return(0);
}
//****************************************************************************************************
// 人机交互界面驱动(参数设置界面) uint Data_setup(void)
// 设计者: 牟联树
// 描  述: 人机交互界
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
int Data_setup(void)
{
     uint Temp;     
     uint Temp1 = 0;
     LCD_Init(0);                                 //清屏
     W_ASII_s(0,0,1,(void *)"  Please input  ");
     W_ASII_s(0,3,1,(void *)"Number:");
     W_Data_s1(64,3,Temp1,1);
     while((Temp = Scan_Keya(0)) != Exit)
     {
         if(Temp < 10) Temp1 = (Temp1<<4)+Temp;
         W_Data_s1(64,3,Temp1,1); 
     }
     return(BCD_BIN(Temp1));
}
//****************************************************************************************************
// 人机交互界面驱动(机器人运行参数选择界面) uint Robot_setup_a(int a)
// 设计者: 牟联树
// 描  述: 人机交互界
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void Robot_setup_a(int a)
{
     uint Data_Temp[256];
     int CD_js,Ye_js = 0;
     uint Temp,Flash_bz;
     struct Robot_xx *P;
     Flash_bz = 0;
     switch(a)
     {
         case 0: P = Robot_Data_Head;
                 break;
         case 1: P = Robot_Data_Head1;
                 break;
         case 2: P = Robot_Data_Head2;
                 break;
         case 3: P = Robot_Data_Head3;
                 break;
         case 4: P = Robot_Data_Head4;
                 break;
         case 5: P = Robot_Data_Head5;
                 break;
         case 6: P = Robot_Data_Head6;
                 break;
         case 7: P = Robot_Data_Head7;
                 break;
         default: break;                  
     }
     CD_js = 0;
     Data_copy(Data_Temp,P);
     P = (struct Robot_xx *)Data_Temp;
     Temp = Robot_LCD(CD_js,Ye_js,P);    //参数设置选择菜单显示程序,里面有清屏操作     
     while((Temp = Scan_Key(0))!= Exit)
     {
         if(Temp == CD_up)
         {
            CD_js--;
            if(CD_js<0) CD_js = 5;
         }    
         if(Temp == CD_down)
         {
            CD_js++;                    //菜单计数器
            if(CD_js>5) CD_js = 0;
         }
         if(Temp == Enter)
         {
            if(CD_js == 4) 
            {
                if(Ye_js<63)
                {
                   Ye_js ++;
                   P ++;
                }
            }    
            if(CD_js == 5)
            {
                if(Ye_js>0)
                {
                   Ye_js --;
                   P --;
                }
            }
            if(CD_js <4) 
            {                
                Temp = Data_setup();        //数据设置
                if(Temp < 0xffff)
                {
                   switch(CD_js)
                   {
                      case 0: (*P).Work_Mode = Temp;
                              break;
                      case 1: (*P).V_max = Temp;
                              break;
                      case 2: (*P).Top_S = Temp;
                              break;
                      case 3: (*P).Time_Err = Temp;
                              break;
                      default: break;                                 
                   }
                   Flash_bz = 1;
                }   
            }
         }     
         Temp = Robot_LCD(CD_js,Ye_js,P);  
     }
     if(Flash_bz > 0) Data_copy1(Data_Temp,a);   
}
//****************************************************************************************************
// 机器人各动作调试程序
// 设计者: 牟联树
// 描  述: 人机交互界
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void MOT_Setup(void)
{
     uint Temp=0x10;
     int CG_x;
     LCD_Init(0);
     W_ASII_s(0,0,1,(void *)"Robot Run Test");
     W_ASII_s(0,2,1,(void *)"Please Enter Run");
     while((Temp = Scan_Key(0))!=Exit)
     {
         if(Temp == Enter)
            Line_b(Robot_Data_Head,0);
         if(Temp == 0x000b)
            Line_c(Robot_Data_Head,0);
         if(Temp == 0x0009) 
            Line_c(Robot_Data_Head,1);
         if(Temp == 0x0007) 
            Line_b(Robot_Data_Head,1);          
         if(Temp == 0x000a)
         {
            LCD_Init(0);
            while((Temp = Scan_Keya(0))!=Exit)
            {
              if(Read_CG(0)<1)
              {
                 W_Data_s(40,0,data_Temp[0],1);
                 W_Data_s(40,2,data_Temp[1],1);
                 if((data_Temp[0] != 100)&&(data_Temp[1] != 100))
                 {
                   CG_x = (int)data_Temp[0] - (int)data_Temp[1];
                   CG_x+= ((int)((data_Temp[0] + data_Temp[1])>>1))-16;
                 }
                 if(CG_x > 0)
                   W_Data_s(40,4,CG_x,1);
                 else
                 { 
                   W_Data_s(40,4,-CG_x,1);
                   W_ASII(48,4,'-',1);
                 } 
              }
              else 
              {
                 W_ASII_s(40,0,1,(void *)"CG_Err");
                 W_ASII_s(40,2,1,(void *)"CG_Err");
              }
              Work_daly(10); 
            }
         }  
     }
}
//****************************************************************************************************
// 机器人行走电机测试程序
// 设计者: 牟联树
// 描  述: 机器人行走电机测试程序
// 问  题:
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************  
void MOT_Test1(void)
{
    int Tempa;
    uint Temp;
    LCD_Init(0);
    W_ASII_s(0,0,1,(void *)"MOTO Test Please");
    W_ASII_s(0,2,1,(void *)"Exit!!!!!!!!!!!!");
    Tempa = 350;
    W_Data_s(48,5,Tempa,1);             
    TXD_MOT_V(-Tempa,Tempa);
    while((Temp = Scan_Keya(0))!=Exit)
    {
       if((Temp == CD_up)&&(Tempa < 4400))
       {
          Tempa += 100;
          TXD_MOT_V(-Tempa,Tempa);
       }   
       if((Temp == CD_down)&&(Tempa >450))
       {        
          Tempa -= 100;   
          TXD_MOT_V(-Tempa,Tempa);
       }
       W_Data_s(48,5,Tempa,1);  
    }
    TXD_MOT_V(0,0);
}
//****************************************************************************************************
// 机器人上升电机测试程序
// 设计者: 牟联树
// 描  述: 机器人上升电机测试程序,测试上升电机的功能
// 问  题:
// 日  期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************  
void MOT_Test2(void)
{
    int Temp;
    SPI_Data = SPI_Data&(~0x0002);
    TX_Data(SPI_Data);          //夹块
    TX_MOT_S(350);
    Temp = 350;
    while(Temp<3000)
    {
        Temp+=80;
        Work_daly(30);
        TX_MOT_S(Temp);
    }
    while((RX_Data(0)&0x0800)!=0);       //上升电机向上,直到5号霍尔有信号
    TX_MOT_S(0);
    TX_MOT_S(-350);
    Temp = 350;
    while(Temp<3000)
    {
        Temp+=80;
        Work_daly(30);
        TX_MOT_S(-Temp);
    }
    while((RX_Data(0)&0x8000)!=0);       //上升电机向下,直到1号霍尔有信号
    TX_MOT_S(0);
    TX_MOT_S(0);

⌨️ 快捷键说明

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