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

📄 ppm-rcpro.c

📁 一个用ATMEGA8L写的模型遥控器信号行程解读程序(12864显示)
💻 C
📖 第 1 页 / 共 2 页
字号:
        	}
            }
    		
    		
            /*{uchar bl,lb;                     //仿真
            if(zy==1)
            {cs1_0();cs2_1();}
            else if(zy==0)
            {cs1_1();cs2_0();}
            else if(zy==2)
            {cs1_0();cs2_0();}
            for(lb=0;lb<yq;lb++)
        	{
            xzl(0xb8+yw);
            xzl(0x40+xw);
            for(bl=0;bl<qx;bl++)
                {if(fb==1)xsj(0x00);else xsj(0xff);}
            yw=yw+1;
        	}
            }*/

    
//向LCD写一位数据 
void xsj(uchar dxsj)           //待写数据
                  {rw_0();
                   di_1();
                   dat=dxsj;
                   e_0();
                   delay_us(5);
                   e_1();
                   }
    
//向LCD写一条指令
void xzl(uchar zlz)           //待写指令
                  {rw_0();
                   di_0();
                   dat=zlz;
                   e_0();
                   delay_us(5);
                   e_1();
        		   }

//系统初始化
void xt_csh(void)
            {
             SREG=0x80;
             xtjm();
             while(1)
             {aj=0;
             aj=smaj();
             if(aj==0);         //aj为键值,1为设置键,2为下移键,3为确定键,0为无键
             else if(aj==1){if(xz<3)xz=xz+1;else xz=1;xxm(xz);}                      //选择项目
             else if(aj==2){if(xz==1){if(mod<3)mod=mod+1;else mod=1;xmod(mod);}     //模式选择
                            if(xz==2){if(ch<8)ch=ch+1;else ch=1;xch(ch);}            //通道选择
                            if(xz==3){if(fs<5)fs=fs+1;else fs=1;xfs(fs);}}           //输入选择
             else if(aj==3)break;
             }
             clear(0,0,64,8,2,1);   
             gzjm();
                  if(mod==1)
                     MCUCR=MCUCR|0x0e;//INT1上升触发,INT0下降触发
             else if(mod==2) 
                     MCUCR=MCUCR|0x0b;
             else if(mod==3)
                     {}
             GICR=GICR|0xC0;//INT1中断使能
     
    		 
             }
//写项目(菜单标题)
void xxm(uchar hz)     //菜单标题
         {xhz(11,0,0,0,1);xhz(12,16,0,0,1);
          switch(hz)
                 {case 1:xhz(9,32,0,1,1);xhz(10,48,0,1,1);break;    //类型
                  case 2:xhz(13,32,0,1,1);xhz(14,48,0,1,1);break;   //通道
                  case 3:xhz(15,32,0,1,1);xhz(16,48,0,1,1);break;   //输入
                       //选择
                  }                               
          }         	 
             
//写类型
void xmod(uchar mz)       //类型                   3选1                         
          {switch(mz)
                  {case 1:{xzm(1,0,2,1,0);xzm(1,8,2,1,0);xzm(2,16,2,1,0);
                           //xzm(1,32,2,1,1);xzm(4,40,2,1,1);xzm(2,48,2,1,1);
                           xzm(1,0,2,0,1);xzm(3,8,2,0,1);xzm(2,16,2,0,1);}break;
                   case 2:{xzm(1,0,2,1,1);xzm(1,8,2,1,1);xzm(2,16,2,1,1);
                           xzm(1,32,2,1,0);xzm(4,40,2,1,0);xzm(2,48,2,1,0);
                           //xzm(1,0,2,0,1);xzm(3,8,2,0,1);xzm(2,16,2,0,1);
                		   }break;
                   case 3:{//xzm(1,0,2,1,1);xzm(1,8,2,1,1);xzm(2,16,2,1,1);
                           xzm(1,32,2,1,1);xzm(4,40,2,1,1);xzm(2,48,2,1,1);
                           xzm(1,0,2,0,0);xzm(3,8,2,0,0);xzm(2,16,2,0,0);}break;
                	}
           }
//写通道
void xch(uchar cz)               //通道值                   8选1    	  
         {switch(cz)
                 {case 1:xs(8,48,4,0,1);xs(1,0,4,1,0);break;
                  case 2:xs(1,0,4,1,1);xs(2,16,4,1,0);break;
                  case 3:xs(2,16,4,1,1);xs(3,32,4,1,0);break;
                  case 4:xs(3,32,4,1,1);xs(4,48,4,1,0);break;
                  case 5:xs(4,48,4,1,1);xs(5,0,4,0,0);break;
                  case 6:xs(5,0,4,0,1);xs(6,16,4,0,0);break;
                  case 7:xs(6,16,4,0,1);xs(7,32,4,0,0);break;
                  case 8:xs(7,32,4,0,1);xs(8,48,4,0,0);break;
        		  }
          } 
    	  

//写输入方式
void xfs(uchar fz)   //直接  反向  接收  反接  输出         5选1 
         {switch(fz)
                 {case 1:  //输出  直接  反向
                         {xhz(15,0,6,1,1);xhz(17,16,6,1,1);xhz(18,48,6,1,0);
                          xhz(19,0,6,0,0);xhz(20,32,6,0,1);xhz(21,48,6,0,1);}break;
                  case 2:  //直接  反向  接收
                         {xhz(18,0,6,1,1);xhz(19,16,6,1,1);xhz(20,48,6,1,0);
                          xhz(21,0,6,0,0);xhz(19,32,6,0,1);xhz(22,48,6,0,1);}break;
                  case 3:     //反向  接收  反接
                         {xhz(20,0,6,1,1);xhz(21,16,6,1,1);xhz(19,48,6,1,0);
                          xhz(22,0,6,0,0);xhz(20,32,6,0,1);xhz(19,48,6,0,1);}break;
                  case 4:     //接收  反接  输出
                         {xhz(19,0,6,1,1);xhz(22,16,6,1,1);xhz(20,48,6,1,0);
                          xhz(19,0,6,0,0);xhz(15,32,6,0,1);xhz(17,48,6,0,1);}break;
                  case 5:     //反接  输出  直接
                         {xhz(20,0,6,1,1);xhz(19,16,6,1,1);xhz(15,48,6,1,0);
                          xhz(17,0,6,0,0);xhz(18,32,6,0,1);xhz(19,48,6,0,1);}break;
                  }
          }
//系统界面
void xtjm(void)
          {uchar chbl;
           clear(0,0,64,8,2,1);
           xhz(5,32,0,1,1);     //系
           xhz(6,48,0,1,1);     //统
           xhz(7,0,0,0,1);      //设 
           xhz(8,16,0,0,1);     //置
           {xmod(1);xmod(2);xmod(3);xzm(1,0,2,0,1);xzm(3,8,2,0,1);xzm(2,16,2,0,1);
            for(chbl=1;chbl<9;chbl++)
                xch(chbl);
            xs(8,48,4,0,1);
            xhz(15,0,6,1,1);xhz(17,16,6,1,1);xhz(18,48,6,1,1);
            xhz(19,0,6,0,1);xhz(20,32,6,0,1);xhz(21,48,6,0,1);
            }   	
           }
//欢迎界面
void hyjm(void)
          {uchar yd;
           for(yd=0;yd<9;yd++)
               {clear(0,2,64,2,2,1);
                xhz(1,yd*4,2,1,1);
                xhz(2,yd*4+16,2,1,1);
                xhz(3,32-yd*4,2,0,1);
                xhz(4,48-yd*4,2,0,1);
                delay_ms(240);
                }
           delay_ms(35000);
           }
//工作界面
void gzjm(void)
          {switch(ch)
                  {case 1:gzdy1();break;
                   case 2:gzdy1();gzdy2();break;
                   case 3:gzdy1();gzdy2();gzdy3();break;
                   case 4:gzdy1();gzdy2();gzdy3();gzdy4();break;
                   case 5:gzdy1();gzdy2();gzdy3();gzdy4();gzdy5();break;
                   case 6:gzdy1();gzdy2();gzdy3();gzdy4();gzdy5();gzdy6();break;
                   case 7:gzdy1();gzdy2();gzdy3();gzdy4();gzdy5();gzdy6();gzdy7();break;
                   case 8:gzdy1();gzdy2();gzdy3();gzdy4();gzdy5();gzdy6();gzdy7();gzdy8();break;
                   }
           }
void gzdy1(void)
           {xs(1,0,0,1,1);xs(11,8,0,1,1);xs(11,16,0,1,1);}
void gzdy2(void)
           {xs(2,0,0,0,1);xs(11,8,0,0,1);xs(11,16,0,0,1);}
void gzdy3(void)
           {xs(3,0,2,1,1);xs(11,8,2,1,1);xs(11,16,2,1,1);}
void gzdy4(void)
           {xs(4,0,2,0,1);xs(11,8,2,0,1);xs(11,16,2,0,1);}
void gzdy5(void)
           {xs(5,0,4,1,1);xs(11,8,4,1,1);xs(11,16,4,1,1);}
void gzdy6(void)
           {xs(6,0,4,0,1);xs(11,8,4,0,1);xs(11,16,4,0,1);}
void gzdy7(void)
           {xs(7,0,6,1,1);xs(11,8,6,1,1);xs(11,16,6,1,1);}
void gzdy8(void)
           {xs(8,0,6,0,1);xs(11,8,6,0,1);xs(11,16,6,0,1);}               
    
//写一个数字
void xs(uchar sz,uchar xs,uchar ys,uchar zs,uchar sf)  //待写数字,首行,首列,左右屏,0==反白
        {uchar is;
         pzy(zs);
         sz=(sz+1)*16;
         xzl(0xb8+ys);
         xzl(0x40+xs);
         for(is=sz-16;is<sz-8;is++)
         {if(sf==1)
          xsj(xssz[is]);
          else
          xsj(~xssz[is]);
          }
         xzl(0xb9+ys);
         xzl(0x40+xs);
         for(is=sz-8;is<sz;is++)
         {if(sf==1)
          xsj(xssz[is]);
          else
          xsj(~xssz[is]);
          }
         }
//写一个字母
void xzm(uchar zm,uchar x,uchar y,uchar z,uchar f) //待写字母,X位置,Y位置,左右屏,反白
         {uchar is;
         pzy(z);
         zm=zm*16;
         xzl(0xb8+y);
         xzl(0x40+x);
         for(is=zm-16;is<zm-8;is++)
             {if(f==1)xsj(zmsz[is]);
              else xsj(~zmsz[is]);
              }     
         xzl(0xb9+y);
         xzl(0x40+x);
         for(is=zm-8;is<zm;is++)
             {if(f==1)xsj(zmsz[is]);
              else xsj(~zmsz[is]);
        	  }
         }
//左右屏判别           
void pzy(uchar pz)        //1=左边,0=右边  
         {if(pz==0)
            {cs1_1();cs2_0();}
         else 
             {cs1_0();cs2_1();}
          }
//扫描按键
uchar smaj(void)             //返回按键号   
           {uchar ls,jianzhi;
            DDRC=DDRC&0xf8;
            PORTC=PORTC|0x07;
            jianzhi=PINC&0x07;
            if(jianzhi!=0x07)
            {switch(jianzhi)
                    {case 0x06:jianzhi=1;break;
                     case 0x05:jianzhi=2;break;
                     case 0x03:jianzhi=3;break;
                     }
             while(0x07!=PINC&0x07);
             }
             else jianzhi=0;
             return(jianzhi);
            }

//主函数
void main(void)
          {uchar xzz=35;
           DDRD=0xf3;
           DDRB=0xff;        //配置端口为输出
           PORTD=255; 
           dj=0;     
           lcd_csh();              //LCD初始化      
           hyjm();                //欢迎界面
           xt_csh();                //系统初始化
          // SREG=0X80;
          // MCUCR=MCUCR|0x0e;//INT1上升触发,INT0下降触发
           while(1)
                {delay_ms(1500);
                 if(cc1!=0){ccc=(cc1+xzz)*8;xs(ccc/1000,24,0,1,1);xs(10,32,0,1,1);xs(ccc/100%10,40,0,1,1);xs(ccc/10%10,48,0,1,1);
                 if(cc2!=0){ccc=(cc2+xzz)*8;xs(ccc/1000,24,0,0,1);xs(10,32,0,0,1);xs(ccc/100%10,40,0,0,1);xs(ccc/10%10,48,0,0,1);
                 if(cc3!=0){ccc=(cc3+xzz)*8;xs(ccc/1000,24,2,1,1);xs(10,32,2,1,1);xs(ccc/100%10,40,2,1,1);xs(ccc/10%10,48,2,1,1);
                 if(cc4!=0){ccc=(cc4+xzz)*8;xs(ccc/1000,24,2,0,1);xs(10,32,2,0,1);xs(ccc/100%10,40,2,0,1);xs(ccc/10%10,48,2,0,1);
                 if(cc5!=0){ccc=(cc5+xzz)*8;xs(ccc/1000,24,4,1,1);xs(10,32,4,1,1);xs(ccc/100%10,40,4,1,1);xs(ccc/10%10,48,4,1,1);
                 if(cc6!=0){ccc=(cc6+xzz)*8;xs(ccc/1000,24,4,0,1);xs(10,32,4,0,1);xs(ccc/100%10,40,4,0,1);xs(ccc/10%10,48,4,0,1);
                 if(cc7!=0){ccc=(cc7+xzz)*8;xs(ccc/1000,24,6,1,1);xs(10,32,6,1,1);xs(ccc/100%10,40,6,1,1);xs(ccc/10%10,48,6,1,1);
                 if(cc8!=0){ccc=(cc8+xzz)*8;xs(ccc/1000,24,6,0,1);xs(10,32,6,0,1);xs(ccc/100%10,40,6,0,1);xs(ccc/10%10,48,6,0,1);}}}}}}}}
                }
           }
           
           
        

⌨️ 快捷键说明

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