2014级北航单片机实验报告_第1页
2014级北航单片机实验报告_第2页
2014级北航单片机实验报告_第3页
2014级北航单片机实验报告_第4页
2014级北航单片机实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北航研究生单片机实验报告北京航空航天大学研究生课程考核记录学号姓名成绩课程名称:《单片机系统实验》论文题目:实验报告任课教师评语:任课教师签字:考核日期:年月日一、实验目的了解一款32位单片机(STM32系列)原理及其应用,熟悉单片机的资源,掌握单片机的最小系统设计及扩展技术,掌握单片机的编程语言。通过本实验了解LCD液晶工作原理,能通过编程操作液晶的显示。二、实验设备STM32实验系统一套,PC机一台。三、实验原理1.I/O口及定时器实验:STM32的GPIO口控制4个发光二极管,了解其硬件连接方式,学会使用STM32的一个定时器,掌握对定时器计时方式的编程。编写程序循环点亮4个发光二极管,控制点亮时间为1秒钟闪烁。2.LCD实验:掌握STM32单片机与液晶之间的硬件连接方式,单片机如何驱动液晶进行显示。四、内容与步骤1.学会使用IAR的编译链接调试环境,熟悉IAR中有关STM32使用到的库,并能顺利建立包含各种库文件的工程。2.I/O口及定时器实验:循环定时(用定时器做)点亮4个灯,即每1秒闪烁点亮一个灯,循环往复(或叫跑马灯实验)。3.LCD实验:通过自行编写库文件和了解液晶显示字库,能在液晶上显示“北京航空航天大学机械工程及自动化学院”字样。五、实验程序实验一:I/O口及定时器实验 STM32的GPIO口控制4个发光二极管循环点亮,用定时器计时设置LED灯的点亮时间为1秒。 开发板原理图中LED模块的原理图如图1所示,与LED灯相连的分别是PD8~PD11四个I/O接口,且4个LED灯共阴极,即在LED灯对应的I/O口输出高电平时可点亮该LED灯。图1LED灯硬件原理图 实验中选择定时器TIM2,系统时钟是72MHz,为了实现预定的定时时间,需要配置的关键参数是时钟预分频数TIM_Prescaler和自动重装载寄存器周期的值TIM_Period。实验中需要定时1秒,则设置定时器TIM2为7200分频,即TIM_Prescaler=7199;设置TIM_Period=9999。其计算过程如下:程序代码如下:#include"stm32f10x.h"#define_TIM#define_TIM2/*配置系统时钟,设置系统时钟为72MHz*/voidRCC_Configuration(){ErrorStatusHSEStartUpStatus;//定义枚举类型变量HSEStartUpStatus RCC_DeInit();//复位系统时钟 RCC_HSEConfig(RCC_HSE_ON);//开启HSE HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待HSE起振 if(HSEStartUpStatus==SUCCESS) { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); RCC_HCLKConfig(RCC_SYSCLK_Div1);//选择HCLK时钟源为SYSCLK1分频 RCC_PCLK2Config(RCC_HCLK_Div1);//选择PCLK2的时钟源为HCLK1分频 RCC_PCLK1Config(RCC_HCLK_Div2);//选择PCLK1的时钟源为HCLK2分频 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //选择PLL时钟源为HSE1分频,9倍频 RCC_PLLCmd(ENABLE);//使能PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL输出稳定 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//系统时钟为PLL while(RCC_GetSYSCLKSource()!=0x08);//等待PLL为系统时钟源 }RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);}/*GPIOD初始化设置*/voidGPIOinit(){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;//选中所有的引脚GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//I/O口50MHz输出速度GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置I/O口推挽输出GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化外设D端口}/*初始化定时器*/voidtime_init(void){//系统时钟72MHz:7200分频1秒中断一次,向上计数TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_TimeBaseStructure.TIM_Period=9999;//自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler=7200-1;//时钟预分频数TIM_TimeBaseStructure.TIM_ClockDivision=0;//时间分割值TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

//向上计数TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//初始化定时器TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开定时器中断TIM_Cmd(TIM2,ENABLE);//使能定时器//使能TIM2中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置中断分组NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn; //配置中断线路NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//配置抢占优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //配置从占优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //打开NVIC使能NVIC_Init(&NVIC_InitStructure); //初始化}inti=0;voidmain(){RCC_Configuration();//配置系统时钟GPIOinit(); //GPIOD初始化time_init(); //初始化定时器while(1){switch(i){case0:GPIO_Write(GPIOD,0x0100);break;//PD8置“1”,点亮第一个灯case1:GPIO_Write(GPIOD,0x0200);break;//PD9置“1”,点亮第二个灯case2:GPIO_Write(GPIOD,0x0400);break;//PD10置“1”,点亮第三个灯case3:GPIO_Write(GPIOD,0x0800);break;//PD11置“1”,点亮第四个灯}}}中断服务函数:voidTIM2_IRQHandler(void){if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){TIM_ClearITPendingBit(TIM2,TIM_IT_Update);i++;if(4==i)i=0;}}运行上述程序可以循环点亮4个LED灯,时间间隔为1秒。实验二:LCD实验 借助字模提取软件提取字模点阵数据并存储。LCD显示采用SSD1298驱动器显示窗口设置和地址自增的功能实现快速显示,首先判断坐标位置是否超出边界,然后设置显示窗口大小,设置起始点,发送写入GRAM命令,调用汉字显示的点阵数据,遍历并判断每一位是1或者0,则对应的点是显示画笔颜色还是背景颜色,字模读取顺序选择从左到右,再从上到下,最终在液晶显示屏上显示“北京航空航天大学”。设置地址自增方式和顺序的语句为:#defineDataToWrite(DATA) GPIO_Write(GPIOE,DATA)LCD_WriteReg(0x11,0x6870);voidLCD_WriteReg(uint16_tLCD_Reg,uint16_tLCD_RegValue){ LCD_WR_REG(LCD_Reg);//写寄存器 LCD_WR_DATA(LCD_RegValue); //写数据 }voidLCD_WR_DATA(uint16_tLCD_Data) { LCD_RD(1); //读失能 LCD_CS(0); LCD_RS(1); //1表示数据 DataToWrite(LCD_Data); LCD_WR(0); LCD_WR(1); //上升沿写入 LCD_CS(1); }从这些程序代码中可以最终将0x6870写入外设端口E,对相应位寄存器的配置,实现地址自增方向和顺序选择从左到右,再从上到下。实现从高位开始读取则需对每个字节的数据temp进行如下操作:for(t=0;t<8;t++) { if(temp&0x80) //从高位开始 { LCD_WR_DATA(PenColor);//画字体颜色一个点 } else LCD_WR_DATA(BackColor); //画背景颜色一个点 temp<<=1; }关键程序代码://Led.c文件/********************************************************************Functionname:voidLCD_Showhanzi(u16x,u32y,u8ii,u8size,u16PenColor,u16BackColor)**Descriptions:显示一个字符**inputparameters:x,y起始坐标(x:0~234y:0~308) num字符ASCII码值 size字符大小,使用默认8*16 PenColor字体颜色 BackColor字体背景颜色**outputparameters:无**Returnedvalue:无********************************************************************/voidLCD_Showhanzi(u16x,u32y,u8ii,u8size,u16PenColor,u16BackColor){#defineMAX_CHAR_POSX232#defineMAX_CHAR_POSY304u16temp;u8pos,t;if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;//超过显示范围,直接退出 if(XY)//竖屏显示 { LCD_WindowMax(x,y,x+size,y+size); //设置窗口 LCD_WriteReg(0x11,0x6870); LCD_SetCursor(x,y); }else//横屏显示 { LCD_WindowMax(x,y-size/2,x+size,y); //设置窗口 LCD_WriteReg(0x11,0x6858); LCD_SetCursor(x,y-1);//设置光标位置 } LCD_WriteRAM_Prepare();//开始写入GRAMfor(pos=0;pos<size*2;pos+=1) {temp=hanzi[ii][pos]; //调用1608字体 for(t=0;t<8;t++) { if(temp&0x80) //从高位开始 { LCD_WR_DATA(PenColor);//画字体颜色一个点 } else LCD_WR_DATA(BackColor); //画背景颜色一个点 temp<<=1; } } LCD_WindowMax(0x0000,0x0000,240,320); //恢复窗体大小}//主函数intmain(void){RCC_Configuration();//时钟配置 LCD_Init();//初始化LCD模块 LCD_Clear(WHITE); for(u8i=0;i<8;i++){//设置相邻两个字起点相距20(>16),竖排显示LCD_Showhanzi(40,100+i*20,i,16,RED,WHITE);//汉字显示函数}while(1);}//字模数据constunsignedcharhanzi[8][32]={{0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x44,0x04,0x4E,0x7C,0x58,0x04,0x60,0x04,0x40,0x04,0x40,0x04,0x40,0x0C,0x40,0x34,0x42,0xE4,0x42,0x44,0x42,0x04,0x3E,0x00,0x00},//北{0x02,0x00,0x01,0x08,0x7F,0xFC,0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x01,0x00,0x09,0x30,0x19,0x18,0x31,0x0C,0x41,0x08,0x05,0x00,0x02,0x00},//京{0x08,0x40,0x10,0x20,0x3C,0x00,0x25,0xFC,0x34,0x00,0x2C,0xF0,0x24,0x90,0xFC,0x90,0x24,0x90,0x34,0x90,0x2C,0x90,0x24,0x90,0x24,0x92,0x45,0x12,0x55,0x0E,0x8A,0x00},//航{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x84,0x44,0x08,0x20,0x10,0x10,0x20,0x08,0x1F,0xF0,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFC,0x00,0x00},//空{0x08,0x40,0x10,0x20,0x3C,0x00,0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论