arm学习的项目文档

来源:互联网 发布:傲剑肉身升级数据大全 编辑:程序博客网 时间:2024/06/15 07:55

1)项目功能介绍:按键1、图片手动切换,可向前向后观看,按4键退出观看。

              按键2、图片自动顺序播放,按4键退出观看。

              按键3、显示当前时间,按4键退出观看。

      按键4、退出当前选择的功能。

 

(2)项目代码举例介绍:

1

 TIM_init_typedef tim_init_typedef;
 GPIO_Init_Typedef gpio_init_typedef;
 UART_init_typedef uart_init_typedef;
 //RTC_struct_init rtc_struct_init;
 
 gpio_init_typedef.mode=GPIO_MODE_OUT;
 gpio_init_typedef.mode=GPIO_MODE_IN;
 gpio_init_typedef.udp=GPIO_UDP_UP;
 gpio_init_typedef.pinx=GPIO_PIN25|GPIO_PIN26;
 GPIO_INIT(GPIOA,GPIO_PIN25|GPIO_PIN26,gpio_init_typedef);
 gpio_init_typedef.pinx=GPIO_PIN5|GPIO_PIN6;
 GPIO_INIT(GPIOB,GPIO_PIN5|GPIO_PIN6,gpio_init_typedef);
 GPIO_INIT(GPIOF,GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3,gpio_init_typedef);
 
 gpio_init_typedef.mode=GPIO_MODE_ALT1;
 gpio_init_typedef.pinx=GPIO_PIN0;
 //GPIO_INIT(GPIOB,GPIO_PIN0,gpio_init_typedef);
 
 uart_init_typedef.baudrate=115200;
 uart_init_typedef.mode=mode_rx_tx;
 uart_init_typedef.parity=parity_no;
 uart_init_typedef.stop=stop_one;
 uart_init_typedef.wordwidth=wordwidth_8bit;
 uart_init(UART0,uart_init_typedef);
//  LED_INIT();
//  uart_init();
 
 UART_interrupt_init(UART0,(U32)UART0_IRQ);
 IRQ_INTMask_init(INT_UART0,ENABLE);
 IRQ_INTSUBMask_init(SUB_INT_RXD0,ENABLE);
 
//  TIM_init(time_ch0,tim_init_typedef);
// TIM_interrupt_init(time_ch0,(U32)TIMER0_IRQ);
// IRQ_INTMask_init(INT_TIMER0,ENABLE);
// 
 //LCD_clear(0);
 ADC_init(AIN_ch0,ADC_10bit_mode);
 ADC_interrupt_init(AIN_ch0,(U32)ADC_IRQ);
 IRQ_INTMask_init(INT_ADC,ENABLE);
 IRQ_INTSUBMask_init(SUB_INT_ADC,ENABLE);

主函数中,调用相关函数前需要进行初始化处理。创建的对象要放在主函数的开头,放在下面会出错。

 

2

while(1)

{

if(GPIO_readbit(GPIOF,GPIO_PIN0) == 0)

{

count++;

if(count == 5)

{

count = 0;

}

if(count == 0)

{

LCD_display_picture(0,0,480,272,gImage_641);

}

if(count == 1)

{

LCD_display_picture(0,0,480,272,gImage_642);

}

if(count == 2)

{

LCD_display_picture(0,0,480,272,gImage_643);

}

if(count == 3)

{

LCD_display_picture(0,0,480,272,gImage_644);

}

if(count == 4)

{

LCD_display_picture(0,0,480,272,gImage_655);

}

break;

}

 

if(GPIO_readbit(GPIOF,GPIO_PIN1) == 0)

{

count--;

if(count < 0)

{

count = 4;

}

if(count == 0)

{

LCD_display_picture(0,0,480,272,gImage_641);

}

if(count == 1)

{

LCD_display_picture(0,0,480,272,gImage_642);

}

if(count == 2)

{

LCD_display_picture(0,0,480,272,gImage_643);

}

if(count == 3)

{

LCD_display_picture(0,0,480,272,gImage_644);

}

if(count == 4)

{

LCD_display_picture(0,0,480,272,gImage_655);

}

}

if(GPIO_readbit(GPIOF,GPIO_PIN3) == 0)

{

Interface();

    m = -1;

break;

}

}

实现功能1,前后翻看照片。初始化设置了各个按键,然后定义按下1键顺序观看,2键逆序观看。如果刚看到最后一张照片或者最开始的照片,自动切换到头和尾。4键跳出该功能。

 

 

3

while(1)
      { 
       RTC_get_time(&rtc_struct_init); //»ñȡʱ¼äÖµ
       sprintf(time,"%04x-%02X-%02x %02x:%02x:%02x",rtc_struct_init.year,rtc_struct_init.month,
        rtc_struct_init.day,rtc_struct_init.hour,rtc_struct_init.minute,rtc_struct_init.second);
       //sprintf(time,"%02x:%02x:%02x",rtc_struct_init.hour,rtc_struct_init.minute,rtc_struct_init.second);
       LCD_Display_String(148,100,0xff,time);
       delay_ms(300); 
       LCD_Display_String(148,100,0xffffff,time);
       
       if(GPIO_readbit(GPIOF,GPIO_PIN3) == 0)
       {
         Interface();
            m = -1;
         break;
       } 

显示时间函数。每次显示时间之后要刷新一下,不然会第二次显示的数字与第一次显示的叠加。

 

4

 

i = 0;
     while(i<5)
     {
      if(GPIO_readbit(GPIOF,GPIO_PIN3) == 0)
      {
        Interface();
        m = -1;
        break;
      }
      
      LCD_display_picture(0,0,480,272,picture[i]);
      
      if(GPIO_readbit(GPIOF,GPIO_PIN3) == 0)
      {
        Interface();
        m = -1;
        break;
      }
      
      delay_ms(500);
      i++;
      if(i == 5)
      {
       i = 0;
      }
      
      if(GPIO_readbit(GPIOF,GPIO_PIN3) == 0)
      {
        Interface();
        m = -1;
        break;
      }
     } 

自动播放图片,该功能有一个缺陷,退出的时候需要按键许多次,除非按键一次就接收到。多次实验,我猜想应该最后播放图片之后要延迟一会,正好与按键信号冲突,未接收到。所以我在功能实现前后都加了退出函数。

 

5

LCD_display_picture(10,15,458,68,gImage_111);

LCD_Display_16x16(65+100, 75,RED,hanzi[6]);

LCD_Display_16x16(85+100, 75,RED,hanzi[7]);

LCD_Display_String(105+100,75,0xff,"1:");

LCD_Display_16x16(125+100, 75,RED,hanzi[10]);

LCD_Display_16x16(145+100, 75,RED,hanzi[11]);

LCD_Display_String(165+100,75,0xff,"(");

LCD_Display_16x16(185+100, 75,RED,hanzi[15]);

LCD_Display_16x16(205+100, 75,RED,hanzi[17]);

LCD_Display_16x16(225+100, 75,RED,hanzi[18]);

LCD_Display_16x16(245+100, 75,RED,hanzi[19]);

LCD_Display_String(265+100,75,0xff,")");

LCD_Display_16x16(65+100, 125,RED,hanzi[6]);

LCD_Display_16x16(85+100, 125,RED,hanzi[7]);

LCD_Display_String(105+100,125,0xff,"2:");

LCD_Display_16x16(125+100, 125,RED,hanzi[10]);

LCD_Display_16x16(145+100, 125,RED,hanzi[11]);

LCD_Display_String(165+100,125,0xff,"(");

LCD_Display_16x16(185+100, 125,RED,hanzi[16]);

LCD_Display_16x16(205+100, 125,RED,hanzi[17]);

LCD_Display_16x16(225+100, 125,RED,hanzi[18]);

LCD_Display_16x16(245+100, 125,RED,hanzi[19]);

LCD_Display_String(265+100,125,0xff,")");

LCD_Display_16x16(65+100, 175,RED,hanzi[6]);

LCD_Display_16x16(85+100, 175,RED,hanzi[7]);

LCD_Display_String(105+100,175,0xff,"3:");

LCD_Display_16x16(125+100, 175,RED,hanzi[8]);

LCD_Display_16x16(145+100, 175,RED,hanzi[9]);

 

LCD_Display_16x16(65+270,220,0xff,hanzi[0]);

LCD_Display_16x16(85+270,220,0xff,hanzi[1]);

LCD_Display_16x16(105+270,220,0xff,hanzi[2]);

LCD_Display_16x16(125+270,220,0xff,hanzi[3]);

LCD_Display_16x16(145+270,220,0xff,hanzi[4]);

LCD_Display_16x16(165+270,220,0xff,hanzi[5]);

 

主界面显示函数,通过该工具将需要的字体转换成代码。通过该将需要用到的图片转换成代码。再通过显示函数,显示出来。

 

 

6

 

 void __irq UART0_IRQ() //´®¿ÚÖжϷþÎñº¯Êý
{
 RTC_struct_init rtc_struct_init;//¶¨Òåʱ¼ä½á¹¹Ìå,ͨ¹ý´®¿ÚÉèÖÃʱ¼ä
 //static U8 zimu_flag = 0;
  U8 rec_data;
 rec_data = uart_receivedata(UART0);
 
   //²âÊÔ³ÌÐò
  //sprintf(buff2,"%02x %02x %02x %02x %02x %02x %02x %02x", buff[0], buff[1], buff[2], buff[3], buff[4], buff[5], buff[6], buff[7]);
  //LCD_Fill(51, 148, 300, 165, 0xffffff);
  //LCD_Display_String(50, 150, 0, buff2);//×Ö·û´®ÏÔʾº¯ÊýʾÀý
 
 if(rec_data == 0xfe)
 {
  start = 0;
 }
 
 if(start!=0 && rec_data!=0xEF)   //Èç¹ûÒÑÊÕµ½°üÍ·²¢ÇÒµ±Ç°ÊÕµ½µÄ²»ÊÇ°üβEF
 {
  buff[start-1] = rec_data;   //»º´æÊý¾Ý
  start++;
 }
 else if(start!=0 && rec_data==0xEF)  //Èç¹ûÊÕµ½°üβEF
 { 
  if(buff[1] == 0x03 && buff[3] == 0xf1) //Ïà²á¹¦ÄÜ
  {
   if(buff[5] == 0x01 && buff[7] == 0x01) //¿ªÆôÏà²á
   {
    control_num = 1;
   }
   
   if(buff[5] == 0x01 && buff[7] == 0x00) //¹Ø±ÕÏà²á
   {
    control_num = 2;
   }
   
   if(buff[5] == 0x04 && buff[7] == 0x00) //ÉÏÒ»ÕÅͼƬ
   {
    control_num = 3;
   }
   
   if(buff[5] == 0x04 && buff[7] == 0x01) //ÏÂÒ»ÕÅͼƬ
   {
    control_num = 4;
   }
   
   if(buff[5] == 0x02 && buff[7] == 0x05) //ÉèÖÃ50000msµÄÂÖ»»Ê±¼ä
   {
    control_num = 5;
    DelayTime = 50000;
   }
   
   if(buff[5] == 0x02 && buff[7] == 0x09) //ÉèÖÃ90000msµÄÂÖ»»Ê±¼ä
   {
    control_num = 5;
    DelayTime = 90000;
   }
  }
 
 
   //ʱÖÓÉèÖÃ
  if(buff[1] == 0x07 && buff[3] == 0xf0)
  {
   rtc_struct_init.year = DateCheck( buff[5] );
   rtc_struct_init.month = DateCheck( buff[7] );
   rtc_struct_init.day = DateCheck( buff[9] );
   rtc_struct_init.hour = DateCheck( buff[11] );
   rtc_struct_init.minute = DateCheck( buff[13] );
   rtc_struct_init.second = DateCheck( buff[15] );
   
            RTC_set_time(rtc_struct_init);
   control_num = 6;
  }
 
  
  
  memset(buff, 0, sizeof(buff));
  start=0;
 }
 else if(rec_data==0xFE && start==0)     //Èç¹ûÊÕµ½µÄÊÇ°üÍ·FE
 {
  start++;
 }
  
 //ÿ½ÓÊÕÒ»´Î¸´Î»Ò»´Î
 UART0_BASE_PTR->UFCON |= 0x1;
 UART0_BASE_PTR->UFCON |= 0x2;
 UART0_BASE_PTR->UFCON &= ~(0x1);
 IRQ_ClearSRCPND(INT_UART0);//Çå³ý±ê־λ
 IRQ_ClearSUBSRCPND(SUB_INT_RXD0);//Çå³ý±ê־λ
}

 

串口控制,开启关闭相册,切换图片前后观看,设置时间和同步当前时间。如果收到包头FE开始接受数据,当接受到包尾EF停止接受。


部分代码解释。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 享骑电单车没电怎么办 小车前轮刹车卡钳卡死了怎么办 耐克气垫鞋扎了怎么办 骑自行车右大腿根痛怎么办 骑车骑得膝盖疼怎么办 骑了自行车腿疼怎么办 群面没有被问题怎么办 群面没有被提问怎么办 校招解约学校不盖章怎么办 科目三老是跑偏怎么办 面试官说你不好怎么办 面试紧张心态调整不过来怎么办 面试官问缺乏经验怎么办 办好入职手续后就想辞职怎么办 新店长入职应该怎么办 刚入职怀孕了辞职店长不同意怎么办 派遣证丢了怎么办补办 出国留学回来怎么办派遣证 报到证坏了一边怎么办 江苏报到证丢了怎么办 河南报到证丢了怎么办 报到证丢失10年怎么办 退休时无派遣证怎么办 档案里没有派遣证怎么办 档案中派遣证丢失怎么办 中专毕业后想读大学该怎么办 软考准考证丢了怎么办 面试薪资要低了怎么办 应聘等通知没有电话回复怎么办 学生信息表里的籍贯不对怎么办? 小学生信息表里的籍贯不对怎么办? 钉钉下班没打卡怎么办 如果在厂里饭卡丢了怎么办 工作上做错了事想辞职怎么办 结婚辞职怀孕感觉做错了怎么办 换新手机了钉钉怎么办 公众号申请链接无效怎么办 指纹打卡机时间调错已打卡怎么办 智慧云平台先锋讲座打不开怎么办 下雨穿套裙工装好冷怎么办 国家债务违约不要国际融资怎么办