免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机内部结构测试报告姓名: 苏汉生班别:09机械1班 学号:0915020045 指导老师:庞志目录1. 跑马灯实验12. 跑马灯实验23. 跑马灯实验34. 按键实验、蜂鸣器5. 定时器数码管显示6. 看门狗实验7. ad数模转换实验程序运行分析一、跑马灯实验11测试程序名称:跑马灯实验12程序功能介绍:跑马灯1的程序功能主要是控制led灯闪亮的顺序,使八个led灯按照程序设定闪亮。但对按键和其他元件不起任何控制作用。3程序相关的电路图:8位流水灯电路4程序总体(主函数)流程图:i=i+1延时80msa口输出led_table数组中第i个元素i=0i=36初始化i/o口i=0开始 y n (2)n us延时函数:i=i+1延时1usini=0开始结束 n y5每个函数(延时函数)的流程图:(1)1us延时函数:结束延时1us开始(3)1ms延时函数: (4)n ms掩饰函数:i=i+1延时1msini=0开始结束i1140i=i+1i=0开始结束 n n y y6程序涉及的技术解析:unsigned char led_table=0xfe,0x00,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x00,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0x00,0xff,0x7e,0xbd,0xdb,0xe7,0xff,0x00,0xe7,0xdb,0xbd,0x7e,0xff,0x00;上述这个语句用到了一维数组,命名为led_table,该数组一共有37个元素,每一个元素是一个十六进制的数,这些十六进制的数代表着开发板上的led灯闪亮的规律(输出1为不亮,输出0为亮)。porta = 0xff;ddra = 0xff;ddre=0xff;porte=0xff;上述语句是i/o口(端口a寄存器)的初始化,a口的8个脚控制开发板上的8个led灯。初始化a口设置为输出,8个引脚分别为1111 1111,led等为全灭的状态。单片机与led灯之间连接了一个74hc573八进制3态非反转透明锁存器,e口2脚接在74hc573锁存器的使能端。当锁存使能端为高电平1时,锁存对于数据是透明的(也就是说输出同步);当锁存使能端为低电平0时,符合建立时间和保持时间的数据会被锁存。初始化e口设置为输出,8个引脚分别为1111 1111,使锁存器对于数据是透明的,输出同步。porta = led_tablei+;上述语句是a口的8个引脚调用一维数组led_table中的十六进制数据,使开发板上的8个led灯根据数据中的十六进制数据闪亮。7程序运行结果:将程序烧进单片机后,8个led灯立即全部闪亮,瞬间后8个led灯依次由上到下均匀的有规律的闪亮;之后8个led灯全部又一起闪亮一次,然后第一个led灯和最后一个led灯一起闪亮一次,接着是第二个和倒数第二个一起闪亮一次,一直到中间两个led灯一起闪亮;然后8个led灯有全部一起闪亮一次,接着又从中间两个led灯开始一起闪亮,一直到第一个和第八个,接着全暗,全亮,一直这样循环。i+与+i的区别,i+是先运行i再加1,+i是i先加1再运行。porta = led_tablei+; 改成porta = led_tablei; i=i+;if(i=36) i=0;改为if(i=2) i=0;8个led灯先全暗,后全亮,一直循环。if(i=36) i=0;改为if(i=11) i=0;8个led灯先全暗,接着全亮,再全暗,然后led1亮,led2亮,led3亮,led4亮,led5亮,led6亮,led7亮,led8亮,一直循环。二、跑马灯实验21测试程序名称:跑马灯实验22能介绍:跑马灯2程序功能主要是控制led灯闪亮的顺序,使八个led灯按照程序设定闪亮。但对按键和其他元件不起任何控制作用。3程序相关电路图:8位流水灯电路4程序总体(主函数)流程图:a口初始化定义无符号字符型ii=i+1延时300ms数据寄存器端口a的1左移i位再取反i 8初始化i/o口开始 n y5每个函数(延时函数)的流程图:延时1us开始结束1us 延时函数:i=i+1i1140i=0开始结束i=i+1延时1usini=0开始结束nus 延时函数: 1ms 延时函数: n n y yi=i+1延时1msini=0开始结束nms 延时函数: n y6程序涉及的技术解释:porte |=(12);ddre |=(12);porta = 0xfe;ddra = 0xff;上述程序语句是对端口a和端口e寄存器的初始化。片机与led灯之间连接了一个74hc573八进制3态非反转透明锁存器,e口2脚接在74hc573锁存器的使能端。当锁存使能端为高电平1时,锁存对于数据是透明的(也就是说输出同步);当锁存使能端为低电平0时,符合建立时间和保持时间的数据会被锁存。端口方向控制寄存器ddre的2脚设置为1,所以e口2脚为输出。数据寄存器porte的2脚设置为1,74hc573锁存器锁存对于数据是透明的(也就是说输出同步)。端口方向寄存器ddra的8个脚都设置为1,a口8个脚全部为输出。数据寄存器porta的8个脚都设置为1111 1110,初始状态为第一个led灯亮。for(i=0;i8;i+) porta = (1i); delay_nms(300); 该程序语句是一个for循环语句。先运行i=0,判断i是否小于8,如果条件成立,则运行大括号里面的程序,接着再运行i+;如果条件不成立(i大于或者等于8),则退出循环,结束语句。porta = (1i);数据寄存器porta的8个脚对应于8位,存放8个数字,1左移i位,再按位取反。7程序运行结果:led1亮,led2亮,led3亮,led4亮,led5亮,led6亮,led7亮,led8亮,一直循环。porta = (1i) 改成 porta = (1i)第一个灯不亮,第二个灯不亮,第三个灯不亮,第四个灯不亮,第五个灯不亮,第六个灯不亮,第七个灯不亮,第八个灯不亮,一直循环。porta = (1i) 改成 porta = (0i)全亮。for(i=0;i8;i+) 改成 for(i=0;i8;i=i+2)porta = (1i) 改成 porta = (3i)led1,2亮,led3,4亮,led5,6亮,led7,8亮,一直循环。三、跑马灯实验31测试程序名称:跑马灯实验3。2程序功能介绍:通过控制数据寄存器porta的8个脚上寄存的数字来控制位于开发板上8个led灯的亮和暗。3程序相关的电路图:8位流水灯电路定义无符号字符型i延时300ms随机数产生函数中下随机数种子初始化i/o口开始4程序总体(主函数)流程图:5每个函数的流程图:1us 延时函数:延时1us开始结束n us延时函数: 1ms延时函数:i=i+1i1140i=0开始结束i=i+1延时1usini=0开始结束 n n y yi=i+1延时1msini=0开始结束n ms延时函数: n y6程序涉及的技术解释:porte|=(12);ddre=0xff;porta = 0xff;ddra = 0xff;上述程序语句是对端口a和端口e寄存器的初始化。片机与led灯之间连接了一个74hc573八进制3态非反转透明锁存器,e口2脚接在74hc573锁存器的使能端。当锁存使能端为高电平1时,锁存对于数据是透明的(也就是说输出同步);当锁存使能端为低电平0时,符合建立时间和保持时间的数据会被锁存。端口方向控制寄存器ddre的8脚设置为1,所以e口为输出。数据寄存器porte的2脚设置为1,74hc573锁存器锁存对于数据是透明的(也就是说输出同步)。端口方向寄存器ddra的8个脚都设置为1,a口8个脚全部为输出。数据寄存器porta的8个脚都设置为1,8个led灯的初始状态为暗。srand(10);该程序语句是中下随即种子。porta = rand();该程序语句是随机数产生函数,通过随机数产生函数产生8个数字,分别放到数据寄存器porta的8个脚上,来控制8个led的亮和暗。7程序运行结果:8个led灯无规律地闪亮,有时候是两个同时亮,有时候是三、四个,有时候是五、六个,毫无规律地闪亮。四、按键实验、蜂鸣器1测试程序名称:按键实验、蜂鸣器。2程序功能介绍:通过对i/o口的设置,从而控制k5、k6、k7、k8四个按键,当按下其中一个按键时,蜂鸣器就会发出相应的响声数。3程序相关的电路图:蜂鸣器电路独立按键电路蜂鸣器响1声,每响1声延时50ms蜂鸣器响2声,每响1声延时50ms蜂鸣器响3声,每响1声延时50ms蜂鸣器响4声,每响1声延时50mse端口1左移0位再取反e端口1左移1位再取反e端口1左移2位再取反e端口1左移3位再取反从get_key函数中取一个值赋给key初始化i/o口定义无符号字符型key开始结束4程序总体(主函数)流程图:key(1s4)0xf0) (1s3)0xf0) (1s2)0xf0) (1s1)0xf0)5每个函数的流程图:结束数据寄存器portd高四位初始化为1,即没有按键输入端口方向控制寄存器ddrd高四位为0,即为输入开始键盘初始化: 蜂鸣器初始化:开始端口方向控制寄存器ddrg的4脚置为1,即为输出数据寄存器portg的4脚为0,初始化蜂鸣器不响结束蜂鸣:开始数据寄存器portg的4脚置为1,蜂鸣器响延时h_time ms数据寄存器portg的4脚置为0,蜂鸣器不响延时l_time ms结束结束返回key_value值继续按着刚才按的按键?继续按着刚才按的按键?按下k5、k6、k7、k8其中一个按键?继续按着刚才按的按键?延时1ms延时2ms将key_pin & (1s1)|(1s2)|(1s3)|(1s4)赋给key_value将key_pin & (1s1)|(1s2)|(1s3)|(1s4)赋给key_value初始化key_value=0xff开始键盘扫描: n y n y n y n y6程序涉及的技术解释:ddre = 0xff;porte = 0xff;key_init();buzz_init();其实该程序对端口方向控制寄存器ddre,数据寄存器porte的初始化设置是多余的,因为程序中没有用到e口的寄存器。按键初始化,按键电路中用到d口寄存器的高四位,对应于开发板上的k5、k6、k7、k8按键。将端口方向控制寄存器ddrd的高四位设置为0,即高四位为输入;将数据寄存器portd高四位初始化置为1,即没有按键输入。蜂鸣器初始化,蜂鸣器电路中用到g口寄存器的4脚。将端口方向控制寄存器ddrg的4脚初始化置为1,即4脚为输出;将数据寄存器portg的4脚初始化置为0,即蜂鸣器不响。switch(key) case ( (1s4)0xf0) ): case ( (1s3)0xf0) ): case ( (1s2)0xf0) ): case ( (1s1)0xf0) ): default: break; switch是多分支选择语句,就是比较大的if集;default为不满足所有的switch条件则后面的句子被执行,一般default写在swtich中的最后。当key的值与四个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。每一个case的常量表达式的值都必须互不相同;否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式”只是起语句标识作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。buzz_port |= (1spk);delay_nms(h_time);buzz_port &= (1spk);delay_nms(l_time);蜂鸣器电路中用到g口寄存器的4脚,将数据寄存器portg的4脚置为1,蜂鸣器不响,再延时h_time ms,将数据寄存器portg的4脚置为0,蜂鸣器响,再延时l_time ms。7程序运行结果:8个led灯一直亮着。按下k5按键,蜂鸣器响一声;按下k6按键,蜂鸣器响两声;按下k7按键,蜂鸣器响三声;按下k8按键,蜂鸣器响四声。unsigned char key;ddre = 0xff;porte = 0xff;改成unsigned char key;porta = 0xff;ddra = 0xff;ddre = 0xff;porte = 0xff;porte = (13) 改成 / porte = (13) (把该语句封住)/ porte = (13)beep(100,50);改成/ porte = (13)porta = 0xf7;beep(100,50);/ porte = (13)porta = 0xfb;beep(100,50);/ porte = (13)porta = 0xfd;beep(100,50);/ porte = (19999开始关全局中断定时器1初始化t/c溢出中断使能否开全局中断是countnum=0显示countnum数值结束结束spi初始化: spi主机发送数据:开始开始启动数据传输设置mosi,sck输出等待传输数据使能spi,主机模式结束结束74hc595初始化: 74hc595送数据:开始开始数据寄存器portb的0脚置为1(即ss为1)i/o初始化spi初始化调用spi主机发送的数据一维数组seg_led_buf四个元素的初始化数据寄存器portb的0脚置为0(即ss为0)结束结束74hc595刷新显示:开始有小数点并且小数点位置是174hc595送个位数据74hc595送百位数据否清除数码管个位显示有小数点并且小数点位置是2否是dp置为1延时60微秒清除数码管十位显示是数码管显示个位数据dp置为1延时60微秒清除数码管百位显示74hc595送十位数据数码管显示十位数据 延时60微秒数码管显示百位数据74hc595送千位数据有小数点并且小数点位置是3否是dp置为1清除数码管千位显示延时60微秒数码管显示千位数据结束74hc595显示整形数据:开始否data9999错误处理,超出显示范围则全亮否data999是data99否是数码管显示两位数字data974hc595刷新显示数码管显示四位数字否是清楚数码管四位显示数码管显示三位数字74hc595刷新显示是74hc595刷新显示数码管显示一位数字74hc595刷新显示结束6程序涉及的技术解释:tccr1b = 0x00; /stoptcnt1h = 0x8f; /setuptcnt1l = 0x81;ocr1ah = 0x70;ocr1al = 0x7f;ocr1bh = 0x70;ocr1bl = 0x7f;ocr1ch = 0x70;ocr1cl = 0x7f;icr1h = 0x70;icr1l = 0x7f;tccr1a = 0x00;tccr1b = 0x04; /start timer该程序是对定时器1的初始化,先把时钟关闭,再对中断源进行初始化设置,再打开时钟。(各个寄存器设置的数值对应的功能请查手册)tcnt1h = 0x8f; /reload counter high valuetcnt1l = 0x81; /reload counter low valuecountnum+;if(countnum9999) countnum=0;该程序的作用是每隔953568us(大约1s),countnum加1,对定时器1的初始化,选择定时器计数器的工作模式为普通模式,tcnt1h和tcnt1l组成了t/c1的数据寄存器tcnt1,通过它们可以直接对定时器/计数器单元的16位计数器进行读写访问。oe_ddr |= (1oe);oe_port &= (1oe);portb = 0x0f;spi_init();seg7_led_buf0=16;seg7_led_buf1=16;seg7_led_buf2=16;seg7_led_buf3=16;74hc595的oe脚与单片机pc7相连,端口方向寄存器ddrc的7脚置为1,即为输出,数据寄存器portc的7脚位置1,使74hc595输出使能。数据寄存器portb低四位全部置为1,即数码管初始化四位都不亮。seg_led_buf数组的四个元素的数值都为16,数组seg7_data包含了17个元素,第17个元素的16进制数值为0x00,数码管的一位不显示数字,在74hc595刷新显示的程序中,74hc595送数据要根据数据seg_led_buf的数值在数组seg7_dataseg7_led_buf0上取相应的值。7程序运行结果:从0开始,数码显示管每个大概一秒的时间加1并且显示出来,显示的数值从0到9999。六、看门狗实验1测试程序名称:看门狗实验2程序功能介绍:一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。3程序相关的电路图:结束pe7电平取反喂狗延时300ms喂狗看门狗初始化清零mcucsr指示mcucsr状态初始化i/o口开始检测按键a、b、c、d,有键按键死等造成死循环4程序总体流程图:5每个函数的流程图:结束wde写1,禁止看门狗对wdce和wde写1喂狗开始结束预分频设置为110,vcc=3v时典型的溢出周期为0.95s,vcc=5v时典型的溢出周期为0.9s看门狗修改使能,看门狗使能喂狗开始看门狗初始化: 关闭看门狗:6程序涉及的技术解释:wdtcr |= (1wdce)|(1wde);wdtcr = 0x00;关闭看门狗,在同一个指令内对wdce和wde写“1”,即使wde已经为“1”,在紧接的4个时钟周期之内对wde写“0”。porte = (mcucsr & 0x1f);mcucsr = 0x00; wdt_init();wdr();wdr是看门狗计数器的清零指令,其作用是对看门狗定时器进行清0。当看门狗被禁止或者mcu复位时,看门狗也被清0。若看门狗定时器定时时间到,而没有执行看门狗定时器清0指令,即没有定时喂狗,mcu将进入复位状态。复位启动后,从系统复位向量开始执行程序。7程序运行结果没有明显现象。七、ad模数转换实验1测试程序名称:ad模数转换实验2程序功能介绍:通过a/d转换器,把模拟信号转换成数字信号,并且在lcd液晶显示屏上显示出来。3程序相关的电路图:ad输入电路12864/1602液晶显示电路是否i=i+1延时60si18i=0显示acd_1显示acd_0取acd_1取acd_01602初始化i/o初始化开始4程序总体流程图: 5. 每个函数的流程图: 查忙:开始延时500msa口变为输出rs=0延时500ms延时500msen=0rw=00延时500ms延时500ms否temp为非0结束是en=1延时500msa口变为输入上拉使能延时500ms读取a口延时500ms写指令: 延时500msen=0输出数据延时500msen=1延时500msrw=0延时500msrs=1延时500ms调用查忙函数开始结束结束延时500msen=0输出指令延时500ms延时500msen=1rw=0延时5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教学楼钢筋采购承包合同模版及案例
- 小学五年级英语时态及语法全解析
- 小学语文作文教学技巧与范例分析
- 新员工入职劳动合同范本及注意事项
- 书法班教学合作协议及课程设置方案
- 合同审查要点表
- 户外施工临时设施安全技术说明书
- 小学语文作文提分训练方法
- 软件工程项目开发流程与质量控制
- 2025年吊桥景区安全管理规范合同
- 餐饮行业成本核算与利润分析表
- 2025年仪器仪表模拟试题(含参考答案)
- 会议记录舆情应急处置演练内容
- 承办赛事管理办法
- 重庆社工管理办法
- 国企总经理竞聘面试题8套和专业题22问及答案
- 外卖骑手心理健康现状与干预策略
- 仪表安全知识培训
- 重卡换电站项目建议书
- QGDW11486-2022继电保护和安全自动装置验收规范
- 派出所制度管理制度
评论
0/150
提交评论