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

📄 lcd_fuza_yemiam_kongzhi.c

📁 对LCD的键盘控制和复杂显示系统的人机界面 代码在12864上已经成功调通,按照程序的管脚配置把相应管脚连好,即可实现液晶显示,有什么问题可给我发E-MAIL:wangxiongke-119@163
💻 C
📖 第 1 页 / 共 4 页
字号:
      l=80;
      for(y=0;y<4;y++)     //输出键值               
      {shzw_pr(x,l,str[y]);l=l+8;} 
}
//***************************************** 
void shzw_str_BCD(uchar x,uchar **str)   //写数字字符串函数,"二维指针","指针"无法直接接受"指针数组"传递来的地址
{    uchar y;
                                             //一维双重指针,是将二维的数组指针的某一行的初始地址记下来,然后转化成自己的一维显示方式!   
       l=32;
       for(y=0;y<4;y++)     //输出键值               
       {shzw_pr(x,l,str[y]);l=l+8;}     //我开始把数据写成6,7,这里面没有数据!!!!!!所以为什么是随机数据!!  
}
//***************************************** 
void clsr(void)     //清屏         
{      uchar i,j;
       for(i=0;i<8;i++)
       {   prl0(i|0xb8);      //设置页地址
           prr0(i|0xb8);
           prl0(0x40);
           prr0(0x40);
           for(j=0;j<64;j++)  //设置列地址
             { prl1(0x00);    //写0x00 
               prr1(0x00);
             }
       }
}
//**********************************************
void allon(void)    //满屏
    { uchar i,j;
      for(i=0;i<8;i++)
         { prl0(i|0xb8);
           prr0(i|0xb8);
           prl0(0x40);
           prr0(0x40);
           for(j=0;j<64;j++)
             { prl1(0xff);  //写0xff
               prr1(0xff);
             }
          }
      }
//***************************************************      

//***********************************************
void stripe(void)   // 写0xaa
    { uchar i,j;
      for(i=0;i<8;i++)
         { prl0(i|0xb8);
           prr0(i|0xb8);
           prl0(0x40);
           prr0(0x40);
           for(j=0;j<64;j++)
             { prl1(0xaa);
               prr1(0xaa);  
             }
          }
      }

//***********************************************
void stripe1(void)  // 写0x55
{ uchar i,j;
      for(i=0;i<8;i++)
      {    prl0(i|0xb8);
           prr0(i|0xb8);
           prl0(0x40);
           prr0(0x40);
           for(j=0;j<64;j++)
             { prl1(0x55);   
               prr1(0x55);
             }
      }
}
//***********************************************
//init_xt2;   初始化XT2     晶振为4MHZ
//*****************************************************
void init_xt2(void)
{
     unsigned int iq0;
   
   //使用XT2振荡器
   BCSCTL1&=~XT2OFF;             //打开XT2振荡器
   do
   {
   IFG1 &= ~OFIFG;    // 清除振荡器失效标志
   for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
   } 
   while ((IFG1 & OFIFG) != 0);   // 判断XT2是否起振
  BCSCTL2 =SELM_2+SELS;                 //选择MCLK、SMCLK为XT2,  6 MHz,
  BCSCTL2 |=DIVM_1;                            //MCLK 2分频SMCLK=MCLK=3MHZ,
  
   P1DIR=0X0F;
   P1OUT=0X0;
   P1IES=0Xf0;
   P1IE=0Xf0;    //列线下降沿允许P2中断
   P3DIR|=0X7F;       //P3为LCD控制输出
   _EINT();    /*/ Enable interrupts      */
}
//***********************************************
void start_page(void)    //显示开始界面 
{         uchar  a;
          clsr();        //  clear screen
          for(a=0;a<50;a++)    
            {delayms(100);} 
         prl0(0x3f);prr0(0x3f);   //开显示
         delayms(100);       
         
         shzw_pr(0x00,0x00,s2);//2
         shzw_pr(0x00,0x08,s0);//0
         shzw_pr(0x00,0x10,s0);//0
         shzw_pr(0x00,0x18,s8);//8
         hzw_pr(0x00,0x20,nian); //年  
         hzw_pr(0x00,0x30,bi); //毕       
         hzw_pr(0x00,0x40,ye); //业                                                                                                                                        
         hzw_pr(0x00,0x50,she); //设                                                        
         hzw_pr(0x00,0x60,ji); //计        
         hzw_pr(0x02,0x00,cheng); //程
         hzw_pr(0x02,0x10,kong);//控
         hzw_pr(0x02,0x20,lv_bo);//滤
         hzw_pr(0x02,0x30,bo);//波
         hzw_pr(0x02,0x40,qi);//器
         hzw_pr(0x02,0x50,she);//设
         hzw_pr(0x02,0x60,ji);//计      
         hzw_pr(0x04,0x00,zhidao);//指                                                                                                                              
         hzw_pr(0x04,0x10,dao);//导
         hzw_pr(0x04,0x20,lao);//老
         hzw_pr(0x04,0x30,shi);//师
         hzw_pr(0x04,0x40,maohao);//:
         hzw_pr(0x04,0x50,zheng);//郑    
         hzw_pr(0x04,0x60,ai);//爱
         hzw_pr(0x04,0x70,hong);//红         
         hzw_pr(0x06,0x00,zhizuo);//制                                                                                                                             
         hzw_pr(0x06,0x10,zuo);//作
         hzw_pr(0x06,0x20,xue);//学
         hzw_pr(0x06,0x30,sheng);//生
         hzw_pr(0x06,0x40,maohao);//:
         hzw_pr(0x06,0x50,wang);//王     
         hzw_pr(0x06,0x60,xiong);//雄
         hzw_pr(0x06,0x70,ke);//科          
         delayms(100);        
  }
//*******************************************

 void set_page_lowpa(void)    //显示低通滤波器参数设定界面
  {       
          clsr();        //  clear screen
          delayms(100); 
           prl0(0x3f);prr0(0x3f);   //开显示
            delayms(100);
                        
        
           hzw_pr(0x00,0x00,di);//低
           hzw_pr(0x00,0x10,tong);//通
           hzw_pr(0x00,0x20,lv_bo);//滤
           hzw_pr(0x00,0x30,bo);//波    
           hzw_pr(0x00,0x40,can);//参
           hzw_pr(0x00,0x50,shu);//数
           hzw_pr(0x00,0x60,she);//设
           hzw_pr(0x00,0x70,ding);//定
          
           hzw_pr(0x04,0x00,fang);//放
           hzw_pr(0x04,0x10,da);//大
           hzw_pr(0x04,0x20,bei_shu);//倍
           hzw_pr(0x04,0x30,shu);//数
           hzw_pr(0x04,0x40,maohao);//冒号":"
           hzw_pr(0x04,0x70,bei_shu);//单位:倍
          
           hzw_pr(0x06,0x00,jie);//截
           hzw_pr(0x06,0x10,jiezhi);//止
           hzw_pr(0x06,0x20,pin);//频                   
           hzw_pr(0x06,0x30,lv);//率  
           hzw_pr(0x06,0x40,maohao);//冒号":"
           hzw_pr(0x06,0x70,KH);// 单位:KH   
             

             for(q=4;q<=6;q+=2)      //显示设定值!
            { shzw_str(q,shd[q/2]);}
             q=2;                                        
           delayms(100); 
    
        
         }

//******************************************
 
void sending_page(void)     
  {         //数据发送提示界面!
       clsr();        //  clear screen
          delayms(100);
           prl0(0x3f);prr0(0x3f);   //开显示
            delayms(100);
           hzw_pr(0x00,0x30,ni);//你
           hzw_pr(0x00,0x40,hao);//好
          
           hzw_pr(0x02,0x00,shu_1);//数
           hzw_pr(0x02,0x10,ju);//据
           hzw_pr(0x02,0x20,yi_1);//已
           hzw_pr(0x02,0x30,jing);//经
           hzw_pr(0x02,0x40,cheng_1);//成
           hzw_pr(0x02,0x50,gong);//功
           hzw_pr(0x02,0x60,fa);//发
           hzw_pr(0x02,0x70,song);//送
           
           hzw_pr(0x04,0x00,she_1);//设
           hzw_pr(0x04,0x10,bei);//备
           hzw_pr(0x04,0x20,yi_1);//已
           hzw_pr(0x04,0x30,jing);//经
           hzw_pr(0x04,0x40,zheng_1);//正
           hzw_pr(0x04,0x50,chang);//常
           hzw_pr(0x04,0x60,yun);//运
           hzw_pr(0x04,0x70,xing);//行
  
  
  
     }
//***********************************************

                                         
          //并且显示出要发送的BCD控制代码
void sending_BCD_page(void)     
  {         
       
       uchar i,y;
       clsr();        //  clear screen
          delayms(100);
           prl0(0x3f);prr0(0x3f);   //开显示
            delayms(100);
           hzw_pr(0x00,0x00,fang);//放
           hzw_pr(0x00,0x10,da);//大
           hzw_pr(0x00,0x20,bei_shu);//倍
           hzw_pr(0x00,0x30,shu);//数
           hzw_pr(0x00,0x40,de);//的
           shzw_pr(0x00,0x50,B_1);//"B"
           shzw_pr(0x00,0x58,C_1);//"C"
           shzw_pr(0x00,0x60,D);//"D"
           hzw_pr(0x00,0x68,ma);//码
           hzw_pr(0x02,0x00,shi_fou);//是           
           hzw_pr(0x02,0x10,maohao);//":"
           
           hzw_pr(0x04,0x00,jie);//截
           hzw_pr(0x04,0x10,jiezhi);//止
           hzw_pr(0x04,0x20,pin);//频                   
           hzw_pr(0x04,0x30,lv);//率  
           hzw_pr(0x04,0x40,de);//的
           shzw_pr(0x04,0x50,B_1);//"B"
           shzw_pr(0x04,0x58,C_1);//"C"
           shzw_pr(0x04,0x60,D);//"D"
           hzw_pr(0x04,0x68,ma);//码
           hzw_pr(0x06,0x00,shi_fou);//是
           hzw_pr(0x06,0x10,maohao);//":"
          
                 //显示BCD码数值
           for(y=2;y<=6;y=y+4)
               { 
                  shzw_str_BCD(y,jiguo_BCD_Ma[i]);
                  i++;
                }
                i=6;        
           delayms(100); 
           
  }
//***********************************************
void start(void)
{    uchar  a,x,y;       
   delayms(10);        //1ms
         prl0(0x3f);prr0(0x3f);//开显示
         clsr();        //  clear screen  
         /*  stripe screen */
        prl0(0x3f);prr0(0x3f);   //开显示
        stripe();         
        for(a=0;a<20;a++)
         { delayms(100);}           
        prl0(0x3f);prr0(0x3f);   //开显示
        stripe1();          
         for(a=0;a<20;a++)
          { delayms(100);}
          start_page();
          for(x=2;x<=3;x++)
             {       for(y=0;y<4;y++)   //清键值数组
                  {shd[x][y]=quanbai;}
             }  
             for(x=6;x<=7;x++)
             {       for(y=0;y<4;y++)
                  {jiguo_BCD_Ma[x][y]=quanbai;}
             }           
}


//*******************************************************
void jisuan(void)   //计算输入的数值以便发送
{   double g=0;
    uchar i,r,p;
 
     for(i=2;i<=3;i++)
        {  
           p=0;
           r=data_number[i];
           if(shd[i]!=0)   
                 {
                  
                   while(r--)
                     {
                      if(shuru[i][p]!=12){g=g*10+shuru[i][p]; p++;}                     
                      else{p++; fasong[i]=g;p=data_number[i]-p; break;}
                      }
                    fasong[i]=g;
                    r=data_number[i];
                    g=0;
                    
                   while(p--)         //计算小数部分
                      {g=g/10+shuru[i][--r]/10;}
                      
                      fasong[i]+=g;         //一个数组中的各成员之间可以相互传递数值!    
                  }
                   
         }
               //频率的控制数据的计算!!
                  fasong[0]=fasong[3];    //品质因素"Q"取值固定在这里我们取品质因素"Q=1.42",这个值阻尼比最小!!!!

⌨️ 快捷键说明

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