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

📄 lcd_fuza_yemiam_kongzhi.c

📁 对LCD的键盘控制和复杂显示系统的人机界面 代码在12864上已经成功调通,按照程序的管脚配置把相应管脚连好,即可实现液晶显示,有什么问题可给我发E-MAIL:wangxiongke-119@163
💻 C
📖 第 1 页 / 共 4 页
字号:
            
            i=83;
            i&=0x03;i<<=4;i|=0x04;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
           
            i=83;
            i&=0x0b;i<<=2;i|=0x05;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
            
            i=83;
            i&=0x30;i|=0x06;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
            
            i=83;
            i&=0x40;i>>=2;i|=0x07;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
          
           //发送滤波器B的工作模式"1"     
            P6OUT=0xb8;  
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
            
            i=m[3];
            i&=0x03;i<<=4;i|=0x09;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
           
            i=m[3];
            i&=0x0b;i<<=2;i|=0x0a;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
     
            i=m[3];
            i&=0x30;i|=0x0b;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  

            i=83;
            i&=0x03;i<<=4;i|=0x0c;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
           
            i=83;
            i&=0x0b;i<<=2;i|=0x0d;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
            
            i=83;
            i&=0x30;i|=0x0e;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
            
            i=83;
            i&=0x40;i>>=2;i|=0x0f;i|=0xb0;
            P6OUT=i;
            P3OUT&=~MAX_CP;   //从74HC374的输出数据!
            P3OUT|=MAX_CP;  
            delayms(10);                      
            
           
   /*       
         #define              BIT6
#define    DA_CP           BIT7
#define    LPA                      BIT7 
#define    BPA                      BIT6
#define    HPA                      BIT5
#define    MAX_313                  BIT4
#define    BPB                      BIT3
#define    HPB                      BIT2
#define    Sensor_Signal_Importing  BIT1
#define    LPB                      BIT0
         
     */   
       
      p=3;
            
         }
    
 
 }                                                                                                
//*****************************************************
void main(void)   //主程序
{  
   
   WDTCTL=WDTPW+WDTHOLD;//关看门狗
   init_xt2();   //初始化
   start();      //显示开机页面
   while(1);     //等待中断                  
}
//****************************************************
#pragma vector=PORT1_VECTOR
__interrupt void Port1()
 {    uchar y,i;     //1
      
   if(keyj()==1)
     {     for(y=0;y<5;y++)          //3
               delayms(40);    //消抖动
              
     if(keyj()==1)
        {  P1IE=0X0;              //暂时关中断        //2
           keypoint=keyscan();    //按键见键值保存 
           P1DIR=0X0F;           
           while((P1IN&0Xf0)!=0xf0);
                                     //界面切换的按键控制部分      
 //************************************************************          
          if(keypoint==10)          //A键用来切换页面
            { 
              p=p+1;                 // 5
              if(p==5)p=1;           
              if(p==2)       //P=2显示低通滤波器的参数设置页面
                 {  set_page_lowpa();   
                   for(q=4;q<=6;q+=2)
                   { shzw_str(q,shd[q/2]);}                
                   q=2;    //q=2表示这时不能输入值  
                 }   
             else if(p==3)   //p=3显示数据发送提示页面
                 {   sending_page();
                   q=2;  
                 }
             else if(p==4) 
               {
                i=6;
                sending_BCD_page();                  
                for(y=2;y<=6;y=y+4)
                  { 
                    shzw_str_BCD(y,jiguo_BCD_Ma[i]);
                    i++;
                   }
                 i=6;
                 q=2;
               }         
             else if(p==1)     //P=1显示开机页面
                 {start_page(); q=2;} 
             }  //5
            
 // ************************************************************          
                                    
     else if((keypoint==11)&&(p==2))  //B键用来切换输入参数项
           {                  //1
                  
                  q=q+2;                  
                  if(q==8)
                  q=2;                 
                     
                   if(q==4) //提示输入项,"程控增益"
                          
                           {                               
                              hzw_pr(0x02,0x20,fang);//放
                              hzw_pr(0x02,0x30,da);//大
                              hzw_pr(0x02,0x40,bei_shu);//倍
                              hzw_pr(0x02,0x50,shu);//数
                           }
                              
                   if(q==6)   //"截止频率"
                           {  
                            if(shd[2][keypst-1]==s) //将上一项最后的小数点清除
                                 {
                                 shd[2][--keypst]=quanbai;//让是小数点的这一位数据不显示
                                 data_number[2]=keypst;
                                 shuru[q/2][keypst]=0;                                 
                                 }   //变量可以直接给数组传递数值的!
                                 data_number[2]=keypst;                   
                                 shzw_str(4,shd[2]);    //当把这里的页数写成"2"时就不能在改变设置参数项时把后一位的小数点去掉!!!
                                 hzw_pr(0x02,0x20,jie);//截
                                 hzw_pr(0x02,0x30,jiezhi);//止
                                 hzw_pr(0x02,0x40,pin);//频                   
                                 hzw_pr(0x02,0x50,lv);//率    
                            }
                    if(q==2) 
                           {  
                            if(shd[3][keypst-1]==s)
                                {                                
                                shd[3][--keypst]=quanbai;
                                data_number[2]=keypst;
                                shuru[q/2][keypst]=0;
                                }                             
                                data_number[2]=keypst;  
                                shzw_str(6,shd[3]);   
                                hzw_pr(0x02,0x20,quanbai1);
                                hzw_pr(0x02,0x30,quanbai1);                 
                                hzw_pr(0x02,0x40,quanbai1);
                                hzw_pr(0x02,0x50,quanbai1);
                           } 
                   keypst=0; 
            }   //1
                                   
     else if(keypoint==13)      //D键为输入完数据后的确认键,确认后向FPGA发送数据,并转去看测量页面
               {   
                   if((shd[2][0]!=quanbai)&&(shd[3][0]!=quanbai))//为保证三个参数都有输入项
                            {
                           if(q==4)  
                             {
                              if (shd[2][keypst-1]==s) //将上一项最后的小数点清除
                                 {
                                 shd[2][--keypst]=quanbai;//让是小数点的这一位数据不显示                      
                                 data_number[2]=keypst;
                                 shuru[q/2][keypst]=0;                                 
                                 }   //变量可以直接给数组传递数值的!
                                 data_number[2]=keypst; 
                              }
                            
                           else if(q==6)
                              {
                               if(shd[q/2][keypst-1]==s)
                                 {                                
                                 shd[3][--keypst]=quanbai;
                                 data_number[3]=keypst;
                                 shuru[3][keypst]=0;                                   
                                 }                          
                                 data_number[3]=keypst;
                             
                               }    
              transmit();
              
               }
               
    }                                             
     else if((p==2)&&(q!=2))  //记录键值
               {       //4 
                  if((keypoint==15)&&(keypst>0))//F键用来删除前一个数字
                    { shd[q/2][--keypst]=quanbai;
                       shuru[q/2][keypst]=0;
                       if(shd[q/2][keypst-1]==s)x=0; 
                    }//保证删掉的数字前面有点时不删除点 
                  if(keypst<4)              //指针数组如" *shd[4][4]"最多只有16个存储变量,为何能寸那么多的数据呢?             
                    {   //6                 //加了这个"keypst<4"以后根本就让输入的数据超不过4位!!
                     if(keypoint==1)
                     {shd[q/2][keypst]=s1;shuru[q/2][keypst]=1;keypst++;}                     
                     if(keypoint==2)
                     {shd[q/2][keypst]=s2;shuru[q/2][keypst]=2;keypst++;}                     
                     if(keypoint==3)
                     {shd[q/2][keypst]=s3;shuru[q/2][keypst]=3;keypst++;}                    
                     if(keypoint==4)
                     {shd[q/2][keypst]=s4;shuru[q/2][keypst]=4;keypst++;}                   
                     if(keypoint==5)
                     {shd[q/2][keypst]=s5;shuru[q/2][keypst]=5;keypst++;}                     
                     if(keypoint==6)
                     {shd[q/2][keypst]=s6;shuru[q/2][keypst]=6;keypst++;}                     
                     if(keypoint==7)
                     {shd[q/2][keypst]=s7;shuru[q/2][keypst]=7;keypst++;}                    
                     if(keypoint==8)
                     {shd[q/2][keypst]=s8;shuru[q/2][keypst]=8;keypst++;}                    
                     if(keypoint==9)
                     {shd[q/2][keypst]=s9;shuru[q/2][keypst]=9;keypst++;}                  
                     if(keypoint==0)
                     {shd[q/2][keypst]=s0;shuru[q/2][keypst]=0;keypst++;}                     
                     if(keypoint==12)
                     {shd[q/2][keypst]=s;shuru[q/2][keypst]=12;keypst++;}//C用来显示小数点,同时这个"C'键起到了将上一次输入的全部数据请零的作用
                                           
                      if(shd[q/2][0]==s)  //如果第一个输入的为小数据点,刚为无效
                          {  keypst=0;
                             for(y=0;y<8;y++)   //清键值数组
                             {shd[q/2][y]=quanbai;
                             shuru[q/2][keypst]=0;}       
                           } 
                                                    
                      else if((shd[q/2][0]==s0)&&(shd[q/2][1]!=s)&&(keypst>1))//如果第一个输入为0,第二个不为小数点也无效
                           {  keypst=0;
                             for(y=0;y<3;y++)   //清键值数组
                             {shd[q/2][y]=quanbai;
                             shuru[q/2][keypst]=0;}      
                            }
                             
                      if((shd[q/2][keypst-2]==s)&&(shd[q/2][keypst-1]==s)) //连续输入两个小数点后输入的一个无效
                            {    shd[q/2][keypst-1]=quanbai;
                                    shuru[q/2][keypst-1]=0;                               
                                    keypst-=1;
                             } 
                                                        
                      if(keypst==1)//新输入第一个数,以前原值清除
                             { x=0;
                               for(y=1;y<4;y++)   //清键值数组
                              {shd[q/2][y]=quanbai;
                               shuru[q/2][keypst]=0;} 
                             }
                         
                       if(shd[q/2][keypst-1]==s)  //输入两个小数点,后输入的一个无效
                             {  x=x+1;   
                                if(x>1)
                               { shd[q/2][keypst-1]=quanbai;
                                 shuru[q/2][keypst-1]=0;   
                                 keypst-=1;}     
                             }              
                         {shzw_str(q,shd[q/2]);}    //输出键值,在显示其他的界面时,不就会形成乱码吗!!!!       
                     }//6    
                 }   //4
                     
               
                     
             }    //2
       }        //3       
          P1OUT=0;
          P1IFG=0;         //清除中断标志
          P1IE=0Xf0;   //开中断
    }//1
//想把"C"语言深入的掌握,达到灵活自如的应用,就要在实际的应用调试软件上进行语句的编写和分析其使用特性
//当变量相互之间发生冲突时,有有时编译软件不能识别,这时会发生不可预料的程序执行错误!!!,优化变量的能力对程序的很好执行很重要!!!!
//程序当中我定义了一个函数不用没有报错,我还想是怎么回事,数据不显示哟!
//就是变量的数据覆盖现象,这非常值得注意!!!

⌨️ 快捷键说明

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