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停止接受。
部分代码解释。
- arm学习的项目文档
- 项目学习文档
- Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
- Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
- Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档 .
- Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
- Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
- Flex 手机项目学习文档
- ARM学习的博客
- 学习ARM的心得
- arm的学习
- ARM 学习的总结
- ARM的汇编学习
- ARM存储系统的学习
- 项目文档的编写
- 项目文档的编写
- [ARM经验] 我的ARM学习经历
- ARM初学者学习ARM的步骤
- 【Django】settings(django中settings设置)
- 反射机制的原理和概念
- Storm拓扑
- 第000篇
- spring mvc基础篇(七):Excel视图技术
- arm学习的项目文档
- 听说过了笔试,还拿了个第一,加油~顺便把以前的资料翻翻,熟悉一下
- 树状数组 小白算法学习
- centos7源代码编译安装heartbeat
- MapReduce:详解Shuffle过程
- [SDUT](3362)数据结构实验之图论六:村村通公路 ---最小生成树(图)
- Securing the Barn(dfs)
- c++中的虚函数
- 树状数组(2) 小白算法学习