单片机实验报告1

       单片机实验报告 一、实验目的 1.了解 32 位单片机(STM32 系列)原理及其应用,熟悉单片机的资源,掌握单片机的最小系统设计及扩展技术,掌握单片机的编程语言。

       2.通过本实验了解 LCD 液晶工作原理,能通过编程操作液晶的显示。

       3.通过本实验了解以太网的通信原理,能在计算机与实验系统间通过以太网进行数据传输。

       二、实验设备 STM32 实验系统一套,PC 机一台。

       三、实验原理 1.I/O 口及定时器实验:STM32 的 GPIO 口控制 4 个发光二极管,了解其硬件连接方式,学会使用 STM32 的一个定时器,掌握对定时器计时方式的编程。编写程序循环点亮 4 个发光二极管,控制点亮时间为 1 秒钟闪烁。

       2.LCD 实验:掌握 STM32 单片机与液晶之间的硬件连接方式,单片机如何驱动液晶进行显示。

       3.串行口通信实验:掌握 STM32 单片机与计算机之间的硬件连接方式,了解二者之间的传输协议,进行数据传输。

       四、内容与步骤 1.学会使用 IAR 的编译链接调试环境,熟悉 IAR 中有关 STM32 使用到的库,并能顺利建立包含各种库文件的工程。

       2.I/O 口实验:在建立工程的基础上能点亮发光二极管。

       3.定时器实验:循环定时(用定时器做)点亮 4 个灯,即每 1 秒闪烁点亮一个灯,循环往复(或叫跑马灯实验)。

       4.LCD 实验:通过自行编写库文件和了解液晶显示字库,能在液晶上显示“北京航空航天大学机械工程及自动化学院”字样。

       5.串行口通信实验:编写串行口通信实验程序,能在计算机与 STM32 系统间进行ASCII 码的传输。

       五、关键源代码

       1.I/O 口及定时器实验 //通过定时器 4 中断函数实现跑马灯 void TIM4_IRQHandler()//定时器 4 中断函数 { if(TIM_GetITStatus(TIM4, TIM_IT_Update)!= RESET){ TIM_ClearITPendingBit(TIM4, TIM_IT_Update);switch(aaa){ case 0:{ GPIO_ResetBits(GPIOD, GPIO_Pin_11);GPIO_SetBits(GPIOD, GPIO_Pin_8);break;} case 1:{ GPIO_ResetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);break;} case 2:{ GPIO_ResetBits(GPIOD, GPIO_Pin_9);GPIO_SetBits(GPIOD, GPIO_Pin_10);break;} case 3:{ GPIO_ResetBits(GPIOD, GPIO_Pin_10);GPIO_SetBits(GPIOD, GPIO_Pin_11);break;} } aaa++;if(aaa==4)aaa=0;} } int main(){ RCC_Configuration();//配置系统时钟 NVIC_Configuration();//配置中断 GPIO_Initialize();//初始化 I/O 口 TIME_Initialize();//初始化定时器 4 while(1);} 2.LCD 实验 //在字体库文件中创建汉字点阵数组 hanzi[14][32],而后逐个显示字体库中的汉字 const unsigned char hanzi[14][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}, //京

       „,} //汉字点阵数组,这里只给出了“北”和“京”,全部的有“汤志达贾英杰北京航空航天大学” void LCD_ShowHZ(u8 x, u16 y, u8 num, u8 size, u16 PenColor, u16 BackColor)//显示单个 16*16 汉字 { #define MAX_CHAR_POSX 232 #define MAX_CHAR_POSY 304 u8 temp;u8 pos,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,x+size,y);//设置窗口 LCD_WriteReg(0x11, 0x6858);LCD_SetCursor(x, y-1);//设置光标位置 } LCD_WriteRAM_Prepare();//开始写入 GRAM for(pos=0;pos

       RCC_Configuration();//时钟配置 LCD_Init();//初始化 LCD 模块 LCD_Clear(WHITE);for(u8 i=0;i<3;i++)LCD_ShowHZ(50+i*16, 100, i, 16, RED, WHITE);for(;i<6;i++)//显示“贾英杰” LCD_ShowHZ(130+i*16, 100, i, 16, RED, WHITE);for(;i<14;i++)//显示“北京航空航天大学” LCD_ShowHZ(50+i*16, 200, i, 16, RED, WHITE);while(1);} 3.串行口通信实验 //通过串口通信不断向上位机发送“buaa” void Uart1_PutChar(u8 ch)//发送单个字符 { USART_SendData(USART1, ch);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)== RESET);} int main(){ RCC_Configuration();USART1_Configuration();//需正确设置波特率 while(1){ char a[10]="buaa";for(int i=0;a[i]!="";i++)Uart1_PutChar(a[i]);} } 任课教师评语:

       任课教师签字:

       考核日期:

       年 月 日

       实验报告《基于51单片机的Proteus模拟仿真直流电机控制电路》

       单片机学习心得

       单片机实验

       单片机心得体会

       完整实验报告