电子系统设计专题实验_第1页
电子系统设计专题实验_第2页
电子系统设计专题实验_第3页
电子系统设计专题实验_第4页
电子系统设计专题实验_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

电子系统设计专题试验报告——AVR单片机根底试验学院:电信学院班级:14学号:名:一、试验目的和要求本试验课程的主要目的是通过一个型嵌入式单片机为核心的应用系统设计计算机硬件系统构造根本原理,软件开发编程方法,外围接口电路的组成和应用编程技术,统设计。要求根本试验局部学习单片机系统的根本硬件组成原理和软件程序设计方法试验要求依据题目需求自行设计系统硬件组成电路试任务。二、试验设备及开发环境AVRATmega128单片机为核心的试验开发系统。试验开发板承受技术性能优良的AVRATmega128单片机作为核心器件,还特别设计了USB接口模块、Ethernet网络接口模块,还有MCU对外扩插槽,可为电路扩展模块供给必要的预备。AVR软件开发平台:PCWindowsXPAVRStudio4.16集成开发软件;WinAVR20230610C下载编程工具:JTAGICEmkII测试目标板: ATmega128试验开发板;测试程序:用CWinAVR(GCC)+AVRStudio三、试验设计题目及实现的功能试验一:单片机试验系统开发环境学习生疏试验电路的构造原理、元器件名称、作用及相应的接口连接;学会使用C编译器编辑、编译、调试简洁C源程序;学会使用AVRStudio生疏蜂鸣器电路的编程原理试验程序源代码:#include<avr/io.h> //I/O端口存放器配置文件,必需包含#include<util/delay.h> //延时函数调用文件intmain(void) //GCCmain//参数{PORTE=0X80; //PORTE输出高电平,使蜂鸣器不响DDRE=0X08; //配置端口PE3为输出口while(1){PORTE&=~(1<<PE3);//PE30”,但是这种设置方法不转变PE//的状态,寻常程序中推举这种使用方法_delay_ms(100); //100_delay_ms(100);_delay_ms(100);_delay_ms(100);_delay_ms(100);PORTE|=(1<<PE3);//PE3_delay_ms(100);_delay_ms(100);_delay_ms(100);_delay_ms(100);_delay_ms(100);PORTE&=~(1<<PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);PORTE|=(1<<PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);PORTE&=~(1<<PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);PORTE|=(1<<PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);}}试验二:LED指示灯循环显示程序设计试验生疏LED学会单片机C语言I/O学会外部显示部件LED灯的软件编程使用方法;进一步生疏单片机试验开发系统的使用。试验程序源代码:#include<avr/io.h>#include<util/delay.h>#include“led.h“voidLED_Init{PORTB=PB_MASK;DDRB=PB_MASK;PORTC|=_BV(LED_CS);DDRC|=_BV(LED_CS);}intmain{inti;intm;uint8_tled_sel;LED_Init;while(1){i=0;led_sel=0x01;while(i<3){PORTB=~led_sel;_delay_ms(800);if(led_sel==0x80){led_sel=0x01;++i;}elseled_sel*=2;}i=0;led_sel=0x80;while(i<3){PORTB=~led_sel;_delay_ms(800);if(led_sel==0x01){led_sel=0x80;++i;}elseled_sel/=2;}i=0;m=0;led_sel=0xaa;while(i<3){PORTB=~led_sel;_delay_ms(800);if(m==8){m=0;++i;}if(led_sel==0x00){led_sel=0xaa;}led_sel/=2;++m;}i=0;m=0;led_sel=0x55;while(i<3){PORTB=~led_sel;_delay_ms(800);if(m==8){m=0;++i;}if(led_sel==0x00){led_sel=0x55;}led_sel*=2;++m;}for(i=0;i<3;++i){PORTB|=PB_MASK;_delay_ms(500);PORTB&=~PB_MASK;_delay_ms(500);}}return0;}试验三:数码管动态显示程序设计生疏单片机数码管电路构造原理;学会单片机C语言I/O学会外部显示部件LED灯的软件编程使用方法;学会单片机开发系统的软件调试方法。试验程序源代码:#include<avr\io.h>#include<util\delay.h>#include“digitron.h“uint8_tcode[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //09voidDIG_Init //初始化端口{PORTB=~PB_MASK;DDRB=PB_MASK;PORTG&=0x00;DDRG|=_BV(DIG_CS1)|_BV(DIG_CS2);}voidLED_Flash(inti,intcom){PORTG|=_BV(DIG_CS2);PORTG&=~_BV(DIG_CS1);PORTB=code[i];PORTG|=_BV(DIG_CS1);PORTG&=~_BV(DIG_CS2);PORTB=com;PORTG&=~_BV(DIG_CS1);PORTG&=~_BV(DIG_CS2);_delay_ms(1);

//闪耀一个字符}voidLED_display(ints[8]){for(inti=0;i<100;++i){LED_Flash(s[7],128);LED_Flash(s[6],64);LED_Flash(s[5],32);LED_Flash(s[4],16);LED_Flash(s[3],8);LED_Flash(s[2],4);LED_Flash(s[1],2);LED_Flash(s[0],1);

显示输出}}intmain{intsum[]={0,0,0,0,0,0,0,0};DIG_Init;while(1){LED_display(sum);sum[7]++;for(inti=7;i>0;--i){if(sum[i]==10){sum[i]=0;sum[i-1]++;

//存储显示数字//循环进位}}if(sum[0]==10){sum[0]=0;}}return0;}试验四:定时/计数器中断应用程序设计生疏单片机内部定时/计数器的工作原理;了解单片机中断机制工作原理;把握单片机中断效劳程序的设计方法;了解定时计数器的功能及应用。试验程序源代码:#include<avr/io.h>#include<avr/interrupt.h>#include<avr\io.h>#include<util\delay.h>#include“digitron.h“uint8_tcode[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};intsum[]={0,0,0,0,0,0,0,0};voidDIG_Init{PORTB=~PB_MASK;DDRB=PB_MASK;PORTG&=0x00;DDRG|=_BV(DIG_CS1)|_BV(DIG_CS2);}voidLED_Flash(inti,intcom){PORTG|=_BV(DIG_CS2);PORTG&=~_BV(DIG_CS1);PORTB=code[i];PORTG|=_BV(DIG_CS1);PORTG&=~_BV(DIG_CS2);PORTB=com;PORTG&=~_BV(DIG_CS1);PORTG&=~_BV(DIG_CS2);_delay_ms(1);}voidLED_display(ints[8]){for(inti=0;i<125;++i){LED_Flash(s[7],128);LED_Flash(s[6],64);LED_Flash(s[5],32);LED_Flash(s[4],16);LED_Flash(s[3],8);LED_Flash(s[2],4);LED_Flash(s[1],2);LED_Flash(s[0],1);}}SIGNAL(SIG_OUTPUT_COMPARE1A){TCNT1H=0x00; //T/C1TCNT1L=0x00;//PE30.5if(PORTE&_BV(PE3))PORTE&=~_BV(PE3);//输出低电平elsePORTE|=(1<<PE3); //输出高电平DIG_Init;while(1){LED_display(sum);sum[7]++;for(inti=7;i>0;--i){if(sum[i]==10){sum[i]=0;sum[i-1]++;}}if(sum[0]==10){sum[0]=0;}if(sum[7]==0&&sum[6]==6){sum[7]=0;sum[6]=0;sum[5]++;}if(sum[5]==0&&sum[4]==6){sum[5]=0;sum[4]=0;sum[3]++;}if(sum[3]==0&&sum[2]==6){sum[3]=0;sum[2]=0;sum[1]++;}sum[0]=0;sum[1]=0;}}//主程序intmain(void){DDRE=_BV(PE3); //PE3PORTE&=_BV(PE3);//输出高电平,蜂鸣器制止发声TCCR1B=0x00; //中断掌握存放器清零,停顿T/Cl计数OCR1AH=0x3D; //设置8MHz、256分频、定时0.5s的比较值,OCR1AL=0x09; //与TCNTl的计数值进展比较,假设匹配产生中断TCCR1A=0x00; //T/C1一般端口模式TCCR1B=0x04; //启动定时器T/C1,256分频TIMSK|=0x10; //使能C/Tl比较匹配中断sei; //允许全局中断while(1); //等待中断的发生return0;}试验五:LCD字符图形显示程序设计生疏单片机字符图形显示电路工作原理;了解LCD12864学会单片机掌握字符图形显示的程序设计方法;学会单片机应用系统的人机界面软件设计方法。试验程序源代码:#include<avr/io.h> //io端口存放器配置文件,必需包含#include<util/delay.h> //GCC中的延时函数头文件//端口位定义#defineRSPD5 //数据/命令掌握端0命令,1数据#defineRWPD6 //读/写选择掌握端0写,1读#defineEPD7 //使能端 下降沿读,高电平写//#definePSBPA3 //数据传输方式选择端,H,84L,串口方式//全局变量声明unsignedcharucString[2][4][16]={{“ATMEGA-128“LCD12864“ 换屏显示 “,“刘鑫2110505093“},{“ 五花马, “,“ 千金裘, “,“呼儿将出换美酒,“,“与尔同销万古愁。“}};doublea[4]={0x80+0x00,0x90+0x00,0x88+0x00,0x98+0x00};//函数声明voidLCD12864PortInit(void); //端口初始化voidLCD12864Init(void); //LCD初始化voidLCD12864WriteCommand(unsignedcharucCommand); //LCD写指令voidLCD12864WriteData(unsignedcharucData);//LCD写数据voidLCD12864BusyCheck(void); //读写检测函数,每次对液晶操作前都要进//intmain(void){while(1){unsignedchari;unsignedcharj;unsignedchark;LCD12864PortInit;//端口初始化LCD12864Init;//LCDfor(i=0;i<4;i++){LCD12864WriteCommand(a[i]);for(k=0;k<16;k++){LCD12864WriteData(ucString[0][i][k]);}_delay_ms(15000);}LCD12864Init;for(i=0;i<4;i++){LCD12864WriteCommand(a[i]);for(k=0;k<16;k++){LCD12864WriteData(ucString[1][i][k]);}_delay_ms(15000);}LCD12864Init;for(i=0;i<4;i++){LCD12864WriteCommand(a[i]);for(k=0;k<16;k++){LCD12864WriteData(ucString[0][i+1][k]);};_delay_ms(113000);}LCD12864Init;for(i=0;i<4;i++){LCD12864WriteCommand(a[i]);for(k=0;k<16;k++){LCD12864WriteData(ucString[0][i+2][k]);};_delay_ms(113000);}LCD12864Init;for(i=0;i<4;i++){LCD12864WriteCommand(a[i]);for(k=0;k<16;k++){LCD12864WriteData(ucString[0][i+3][k]);};_delay_ms(113000);}}}voidLCD12864PortInit{//LCDPORTB=0x00; //DDRB=0xFF; //PBPORTD=0x00;DDRD|=(1<<RS)|(1<<RW)|(1<<E);_delay_ms(15);}voidLCD12864Init{LCD12864WriteCommand(0x01);//清屏_delay_ms(15);LCD12864WriteCommand(0x38);//显示模式_delay_ms(5);LCD12864WriteCommand(0x0f);//显示开关掌握,开显示,光标显示,光//标闪耀LCD12864WriteCommand(0x0c);//显示开关掌握,开显示,光标不显示,//光标不闪耀_delay_ms(5);LCD12864WriteCommand(0x06);//光标设置,读或写一个字符后,地址指//针加一,光标加一,整屏不移动}voidLCD12864WriteCommand(unsignedcharucCommand){LCD12864BusyCheck;PORTD&=~(1<<RS); //RS=0,写命令PORTD&=~(1<<RW); //RW=0,写指令PORTD|=(1<<E); //E=1,写操作_delay_ms(2);PORTB=ucCommand; //指令送数据端口PORTD&=~(1<<E); //E=0,停顿写操作_delay_ms(5);}voidLCD12864WriteData(unsignedcharucData){LCD12864BusyCheck;PORTD|=(1<<RS); //RS=1,写数据PORTD&=~(1<<RW); //RW=0,写指令PORTD|=(1<<E); //E=1,写操作_delay_ms(50);PORTB=ucData; //数据送数据端口PORTD&=~(1<<E); //E=0,停顿写操作_delay_ms(5);}voidLCD12864BusyCheck(void){unsignedintuiTemp;uiTemp=3000;DDRB=0x00; //PB口置为输入口,预备读取数据PORTD&=~(1<<RS); //RS=0,读命令PORTD|=(1<<RW); //RW=1,读指令PORTD|=(1<<E); //E=1,使能while((0x80&PINB)&&(uiTemp--)); //0,才能进展读写操作PORTD&=~(1<<E); //E=0DDRB=0xFF; //PA}试验六:键盘掌握程序设计生疏单片机键盘电路工作原理;学会单片机键盘掌握程序设计使用方法;学会单片机矩阵键盘扫描程序的设计;学会键盘掌握与显示部件的联合应用。试验程序源代码:/***************************************************文件名:keypad.c**功能:行列式键盘扫描,并输出键值**说明:程序需要调用串口输出程序在PC**************************************************///**文件名:led.h#ifndefLED_H#defineLED_H#defineLED_CSPC5#definePB_MASK0xFFvoidLED_Init;#endif#include<avr/io.h>#include<util/delay.h>#include<stdio.h>#include<avr/signal.h>//#include“uart.h“//#include“led.h“#defineLINE1_SCANPORTC=(PORTC|_BV(PC7))&~_BV(PC6)#defineLINE2_SCANPORTC=(PORTC|_BV(PC6))&~_BV(PC7)#defineMASK0xFF//端口位定义#defineRSPD5 //数据/命令掌握端0命令,1数据#defineRWPD6 //读/写选择掌握端0写,1读#defineEPD7 //使能端 下降沿读,高电平写//#definePSBPA3 //数据传输方式选择端,H,84L,串口方式voidKP_Init{//CHIP_Init;系统端口初始化DDRB=0xFF;DDRC=0xFF;DDRD=0xFF;DDRE=0xFF;DDRF=0xFF;DDRG=0xFF;PORTD=0x00;PORTE=0x08;PORTF=0x00;PORTC|=0x20;PORTB=0xFF;PORTC=0x02;PORTG|=0x18;PORTB=0x00;PORTG=0x00;//键盘端口初始化PORTC&=0x3F;DDRC|=0xC0;PORTB=0xFF;DDRB=0x00;}uint8_tKP_read{asm(“nop“);uint8_tretb=PINB;returnretb;}uint8_tKP_scan{uint8_tcode=MASK;uint8_tkey=0x00;//scanthefirstlineLINE1_SCAN;LINE1_SCAN;code=KP_read;if(code!=MASK){_delay_ms(10);code=KP_read;if(code!=MASK){switch(code){case0xFE:key=”0”;break;case0xFD:key=”1”;break;case0xFB:key=”2”;break;case0xF7:key=”3”;break;case0xEF:key=”4”;break;case0xDF:key=”5”;break;case0xBF:key=”6”;break;case0x7F:key=”7”;break;}}while(1){code=KP_read;if(code==MASK){_delay_ms(10);code=KP_read;if(code==MASK);break;}}}//scanthesecondlineLINE2_SCAN;LINE2_SCAN;code=KP_read;if(code!=MASK){_delay_ms(10);code=KP_read;if(code!=MASK){switch(code){case0xFE:key=”8”;break;case0xFD:key=”9”;break;case0xFB:key=”A”;break;//case0xFB:key=0x0A;break;case0xF7:key=”B”;break;//case0xF7:key=0x0B;break;case0xEF:key=”C”;break;//case0xEF:key=0x0C;break;case0xDF:key=”D”;break;//case0xDF:key=0x0D;break;case0xBF:key=”E”;break;//case0xBF:key=0x0E;break;case0x7F:key=”F”;break;//case0x7F:key=0x0F;break;}}while(1){code=KP_read;if(code==MASK){_delay_ms(10);code=KP_read;if(code==MASK);break;}}}//ifnokeyispressed,return0x00returnkey;}//函数声明voidLCD12864PortInit(void); //端口初始化voidLCD12864Init(void); //LCD初始化voidLCD12864WriteCommand(unsignedcharucCommand); //LCD写指令voidLCD12864WriteData(unsignedcharucData);//LCD写数据voidLCD12864BusyCheck(void); //voidLCD12864PortInit{//LCDPORTB=0x00; //DDRB=0xFF; //PBPORTD=0x00;DDRD|=(1<<RS)|(1<<RW)|(1<<E);_delay_ms(15);}voidLCD12864Init{LCD12864WriteCommand(0x01);//清屏_delay_ms(15);LCD12864WriteCommand(0x38);//显示模式_delay_ms(5);LCD12864WriteCommand(0x0f);//显示开关掌握,开显示,光标显示,光标闪耀LCD12864WriteCommand(0x0c);//显示开关掌握,开显示,光标不显示,光标不闪耀_delay_ms(5);LCD12864WriteCommand(0x06);//光标设置,读或写一个字符后,地址指针加一,光标加一,整屏不移动_delay_ms(5);}voidLCD12864WriteCommand(unsignedcharucCommand){LCD12864BusyCheck;PORTD&=~(1<<RS);//RS=0,写命令PORTD&=~(1<<RW);//RW=0,写指令PORTD|=(1<<E);//E=1,写操作_delay_ms(2);PORTB=ucCommand; //指令送数据端口PORTD&=~(1<<E); //E=0,停顿写操作_delay_ms(5);}voidLCD12864WriteData(unsignedcharucData){LCD12864BusyCheck;PORTD|=(1<<RS); //RS=1,写数据PORTD&=~(1<<RW); //RW=0,写指令PORTD|=(1<<E); //E=1,写操作_delay_ms(2);PORTB=ucData; //数据送数据端口PORTD&=~(1<<E); //E=0,停顿写操作_delay_ms(5);}voidLCD12864BusyCheck(void){unsignedintuiTemp;uiTemp=3000;DDRB=0x00; //PB口置为输入口,预备读取数据PORTD&=~(1<<RS); //RS=0,读命令PORTD|=(1<<RW); //RW=1,读指令PORTD|=(1<<E); //E=1,使能while((0x80&PINB)&&(uiTemp--)); //0

温馨提示

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

评论

0/150

提交评论