版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安交通大学电子信息与工程学院自动化科学与技术系电子线路设计专题实验报告实验名称 : 电子线路设计专题实验 实验者姓名: XX 实验者学号: 21105040XX 所在班级: 自动化1X 报告完成日期: 2014年 5月 11日一、实验目的; ()熟悉单片机原理;()掌握开发板上常见芯片的功能与用法;()掌握单片机的开发软件:()应用单片机,做一些简单的小应用(电子时钟等)二、实验内容:()创建一个工程将键盘阵列定义为0. 1. 2- E. F,编程实现键盘设置当前时间,再调用系统时钟,显示在LED显示屏上(注意仔细阅读PCF8563资料),键盘设置当前日期显示在LCD显示屏上。()
2、利用D/A转换通道(下行通道)实现锯齿波发生器;输出(15V)固定电压转换成(420mA)电流。()利用A/D转换通道(上行通道)实现数据采集,将采集信号显示在LED屏上。程序要求分别具有平均值滤波、中值滤波和滑动滤波功能。三、开发板简介:图PH-I型51MCU学习系统实物照片简介:四、功能实现与关键代码:()电子时钟:在这一部分,有几个很重要的的程序模块:包含1602初始化、写控制字、写字符等几个函数的1602.h;包含根据I2C总线协议编写的字节及多字节传输和接收函数的viic.h;实现键盘读取操作的key.h;实现不断读取时间芯片的值并显示在1602和led上显示日期时间的read函数等
3、.以下是这几个重要的模块以及主函数程序。1602.h(包含1602初始化、写控制字、写字符等函数)/*检测是否忙、写控制字、写数据等*/void WriteW(uint a) ptr=0xAFF0;*ptr=a;void CheckBF(void) uint i; while(1) ptr=0xAFF1; i=*ptr; i &= 0x80; if(i=0) break;void LCD_Init(void) CheckBF(); WriteW(0x38);CheckBF();WriteW(0x01);CheckBF();WriteW(0x06);CheckBF();WriteW(0x
4、0F);CheckBF();WriteW(0x80);void LCD_Init2(void)CheckBF(); WriteW(0x0F); CheckBF();WriteW(0xC0);void WritD(unsigned char key_asc2) CheckBF(); ptr=0xAF02; *ptr=key_asc2; viic.h(包含根据I2C总线协议编写的字节及多字节传输和接收函数)/* 字节数据传送函数 函数原型: void SendByte(uchar c); 功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都
5、使ack=0 假) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。 */ void SendByte(uchar c) uchar BitCnt; for(BitCnt=0;BitCnt<8;BitCnt+) /*要传送的数据长度为8位*/ if(c<<BitCnt)&0x80)SDA=1; /*判断发送位*/ else SDA=0; _Nop(); SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ _Nop(); _Nop(); /*保证时钟高电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; _Nop()
6、; _Nop(); SDA=1; /*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /*判断是否接收到应答信号*/ SCL=0; _Nop(); _Nop(); /* 字节数据传送函数 函数原型: uchar RcvByte(); 功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数。 */ uchar RcvByte() uchar retc; uchar BitCnt; retc=0; SDA=1; /*置数据
7、线为输入方式*/ for(BitCnt=0;BitCnt<8;BitCnt+) _Nop(); SCL=0; /*置时钟线为低,准备接收数据位*/ _Nop(); _Nop(); /*时钟低电平周期大于4.7s*/ _Nop(); _Nop(); _Nop(); SCL=1; /*置时钟线为高使数据线上数据有效*/ _Nop(); _Nop(); retc=retc<<1; if(SDA=1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */ _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc); /*
8、应答子函数 原型: void Ack_I2c(bit a); 功能:主控器进行应答信号,(可以是应答或非应答信号) */ void Ack_I2c(bit a) if(a=0)SDA=0; /*在此发出应答或非应答信号 */ else SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); /*时钟低电平周期大于4s*/ _Nop(); _Nop(); _Nop(); SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/ _Nop(); _Nop(); /* 向有子地址器件发送多字节数据函数 函数原型: bit ISendStr(uch
9、ar sla,uchar suba,ucahr *s,uchar no); 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 如果返回1表示操作成功,否则操作有误。 注意: 使用前必须已结束总线。 */ /* bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) uchar i; Start_I2c(); /启动总线 SendByte(sla); /发送器件地址 if(ack=0)return(0); SendByte(suba); /发送器件子地址 i
10、f(ack=0)return(0); for(i=0;i<no;i+) SendByte(*s); /发送数据 if(ack=0)return(0); s+; Stop_I2c(); /结束总线 return(1); /* 向有子地址器件读取多字节数据函数 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no); 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。 如果返回1表示操作成功,否则操作有误。 注意: 使用前必须已结束总线。
11、 */ bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) uchar i; Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); SendByte(suba); /*发送器件子地址*/ if(ack=0)return(0); Start_I2c(); SendByte(sla+1); if(ack=0)return(0); for(i=0;i<no-1;i+) *s=RcvByte(); /*发送数据*/ Ack_I2c(0); /*发送就答位*/ s+
12、; *s=RcvByte(); Ack_I2c(1); /*发送非应位*/ Stop_I2c(); /*结束总线*/ return(1); key.h(实现键盘读取操作的)/*有关键盘的函数*/unsigned char code Key_Value_Table16= /有关行列值 0xff,0x00,0x01,0xff,0x02,0xff,0xff,0xff, 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff ;bit bKeyUp_Flag;void Key_Init(void) bKeyUp_Flag=1;/标志位置1unsigned char GetSca
13、nKey(void)unsigned char key, i, temp;unsigned char xdata * ptr;key=0xff;for (i=1; i<0x10; i<<=1)/i的低4位为行数位,行依次检测 循环4次 ptr=0x8fff; * ptr =i; temp = * ptr; /取键盘IO口的值temp &= 0x0f; /屏蔽高四位if (temp!=0x00) /是否有有效键值 key = i<<4; /取行数位的值并将其放入返回值高4位key|=temp; /列数位的值放入返回值低4位break; return key;
14、 /返回行位(高四)和列位(低四)unsigned char GetKey(void)unsigned char key, temp;if (!bKeyUp_Flag)/判断标志,是0执行/*按键程序执行一次后会将bKeyUp_Flag标志位清零,执行此段程序,长按键无效返回无效值 直至按键无效返回无效按键值,置"1"标志位。按键输入恢复有效*/key=GetScanKey();if (key=0xff)/没有按键,置标志位bKeyUp_Flag=1;else/保持按键return 0xff;key=GetScanKey();if (key=0xff)/没有按键return
15、 key;else/有按键有效 temp=key;/取键值Delay_ms(20);/延时20ms 消抖key=GetScanKey();/键盘扫描 if(key!=temp)/判断两次键值是否相同,排除干扰信号影响 确认有效信号 key=0xff;return key;else/取键值 temp=Key_Value_Tablekey>>4; /*行值有效位(键盘的4个行SEL返回的值含有的有效位"1")有且只有一位 键值才有效 否则返回无效键值*/ if (temp=0xff) key=0xff;return key; temp=Key_Value_Table
16、key&0x0f; /*列值有效位(键盘的4个列RL返回的值含有的有效位"1")有且只有一位 键值才有效 否则返回无效键值*/ if (temp=0xff) key=0xff;return key; key=Key_Value_Tablekey>>4*4+Key_Value_Tablekey&0x0f; /*行列组合后的值大于15无效*/ if (key>15) key=0xff;return key; bKeyUp_Flag=0; return key; 实现不断读取时间芯片的值并显示在1602和led上显示日期时间的read函数void
17、 read() unsigned char rd7;/作为读8563数据的缓存区 unsigned char i; while(1) IRcvStr(0xA2,0x02,rd,0x7); rd0=rd0&0x7f;/秒 rd1=rd1&0x7f;/分 rd2=rd2&0x3f;/时 rd3=rd3&0x3f;/日 rd4=rd4; / rd5=rd5&0x1f;/月 rd6=rd6; /年 td_table2=rd6/16; /数据分解 td_table3=rd6%16; td_table4=rd5/16; td_table5=rd5%16; td_ta
18、ble6=rd3/16; td_table7=rd3%16; td_table8=rd2/16; td_table9=rd2%16; td_table10=rd1/16; td_table11=rd1%16; td_table12=rd0/16; td_table13=rd0%16;/LED上显示 ptr=0x9fff; /先清零 * ptr =0x00; ptr=0x8fff; *ptr=0xff; /依次显示秒、分、时 ptr=0x9fff; * ptr =qiduan_tabletd_table13; ptr=0x8fff; *ptr=0x01; Delay_ms(1); ptr=0x9
19、fff; * ptr =qiduan_tabletd_table12; ptr=0x8fff; *ptr=0x02; Delay_ms(1); ptr=0x9fff; * ptr =qiduan_tabletd_table11; ptr=0x8fff; *ptr=0x08; Delay_ms(1); ptr=0x9fff; * ptr =qiduan_tabletd_table10; ptr=0x8fff; *ptr=0x10; Delay_ms(1); Delay_ms(1); ptr=0x9fff; * ptr =qiduan_tabletd_table9; ptr=0x8fff; *pt
20、r=0x40; Delay_ms(1); ptr=0x9fff; * ptr =qiduan_tabletd_table8; ptr=0x8fff; *ptr=0x80; Delay_ms(1); ptr=0x9fff; /先清零 * ptr =0x00; ptr=0x8fff; *ptr=0xff; /LCD上显示日期 LCD_Init(); LCD_Init2(); WritD(ASC2_Value_Tabletd_table0); WritD(ASC2_Value_Tabletd_table1); WritD(td_table2+29); WritD(ASC2_Value_Tabletd
21、_table3); WritD(0x20); WritD(0x20); WritD(0x20); WritD(ASC2_Value_Tabletd_table5); WritD(0x20); WritD(0x20); WritD(0x20); WritD(ASC2_Value_Tabletd_table6); WritD(ASC2_Value_Tabletd_table7); main函数 void main() unsigned int i; Key_Init(); ptr=0x9fff; /先清零 * ptr =0x00; ptr=0x8fff; *ptr=0xff; LCD_Init()
22、; for(i=0;i<13;i+) WritD(tishi_table1i); Delay_ms(200); LCD_Init2(); for(i=13;i<23;i+) WritD(tishi_table1i); Delay_ms(200); Delay_s(4); if(Test_key() Input_data(); inition(); read(); (2)利用D/A转换通道(下行通道)实现锯齿波发生器 这一部分重要的代码片段是对tlc5615的操作以及在main函数中实现正弦等波形,下面是实现正弦波 void tlc5615()(实现DA转换)void tlc5615
23、(unsigned int dat) unsigned char x;CS=1;SCLK=0;Delay_us(500);DIO=0;CS=0;dat=dat<<6; for(x=0;x<12;x+)DIO=dat&0x8000;SCLK=1;dat=dat<<1;SCLK=0;CS=1; main函数unsigned char key=0x0ff;unsigned char xdata *ptr;unsigned float vol = 0;float add = 0.000383;float temp = 0;int main()LCD_Init();
24、Key_Init();ptr = 0x8FF;*ptr = 0x00;/屏幕全部归位Delay_s(4);Check_Busy();write_com(0x01); /显示屏清Check_Busy();while (1)for(i=0;i<6280;i+) vol=500*(sin(i*0.01)+1)/ tlc5615(vol); ()利用A/D转换通道(上行通道)实现数据采集,将采集信号显示在LED屏上。 这一部分重要的代码片段有:对1549芯片的操作,将电压显示在led上(三位小数)的display函数。以下粘贴部分代码段: adc_1549(不断采集端口数据,并送至)int tl
25、c1549() int data_out=0; unsigned char i;DIO = 0;SCLK=0;CS=1;_nop_();CS = 0; /start for(i=1;i<=10;i+) SCLK=1; data_out<<=1; if(DIO) data_out|=0x01; SCLK=0; CS=1; Delay_us(21); return(data_out); disp_voltage函数(将电压显示在LED和LCD上(三位小数)的函数)由于时间仓促只显示了小数点后两位void disp_voltage(int *disp)unsigned char x
26、data *ptr;if(disp2>=0x5)disp2=0x5;disp1=0x0;disp0=0x0;ptr=0x8fff; *ptr=0x01;ptr=0x9fff;*ptr=map*(disp); Delay_us(50);*ptr=0x00;ptr=0x8fff; *ptr=0x02;ptr=0x9fff;*ptr=map*(disp+1); Delay_us(50);*ptr=0x00;ptr=0x8fff; *ptr=0x04;ptr=0x9fff;*ptr=(map*(disp+2)|0x80; Delay_us(50);*ptr=0x00;Check_Busy();/
27、*write_date(ASC2_Valuedisp2);Check_Busy();write_date(0x2e);Check_Busy();write_date(ASC2_Valuedisp1);Check_Busy();write_date(ASC2_Valuedisp0);Check_Busy(); Delay_ms(50);write_com(0x01); /显示屏清Check_Busy();*/ /* write_date(0x00); write_date(0x20); write_date(0x20); write_date(0x20); write_date(0x20); w
28、rite_date(0x20); write_date(0x20); write_date(0x01); write_date(0x20); write_date(0x20); write_date(0x20); write_date(0x20); write_date(0x02); write_date(0x20); write_date(0x20); write_date(0x20); write_date(0x20); */ main函数int main()ptr = 0x8FF;*ptr = 0x00;LCD_Init();Key_Init();/屏幕全部归位Delay_s(4);Ch
29、eck_Busy();write_com(0x01); /显示屏清Check_Busy();while (1)function = GetKey();if (function = 0xff)function = old_function;old_function = function;switch(function)case 0x00:vol = tlc1549();break;case 0x01:if(ave_pointer >= 4)ave_pointer = 0;vol_aveave_pointer = tlc1549();vol = (vol_ave0+vol_ave1+vol_
30、ave2+vol_ave3)/4;ave_pointer = ave_pointer + 1;/LCD_Init1(xianshi1);break;case 0x02:if(slide_pointer >= 10)slide_pointer = 0;vol_slideslide_pointer = tlc1549();vol = (vol_slide0+vol_slide1+vol_slide2+vol_slide3+vol_slide4+vol_slide5+vol_slide6+vol_slide7+vol_slide8+vol_slide9)/10;slide_pointer = slide_pointer + 1;/LCD_Init1(xianshi3);break;case 0x03:if(med_pointer >= 10)med_pointer = 0;amed_pointer = tlc1549();for(j=0;j<=9;j+) for (i=0;i<10-j;i+) if (ai>ai+1) temp=ai; ai=ai+1; ai+1=temp; vol = a4;med_pointer = med_pointer + 1;/LCD_Init1(xia
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职称考取与企业发展的方案
- 交通运输行业电工安全用具方案
- 2024年光伏发电项目保险服务合同
- 碎石场可持续发展方案
- 辐射防护屏蔽材料应用方案
- 2024年健身会所租赁合同:场地、器材及服务
- 2024年企业信息化建设合同内容要素与实施时间表
- 旅游度假屋租赁合同协议书
- 2(2024版)智能机器人研发与生产合同
- 医疗机构净化环境施工方案
- 江西省宜春市丰城市多校2024-2025学年五年级上学期期中数学试卷(含答案)
- 期中模拟测试卷3(试题)-2024-2025学年四年级上册数学(福建)
- 人教版(PEP)三年级英语上册2024期中考试(无答案)
- 宪法与法律学习通超星期末考试答案章节答案2024年
- 方寸之间 课件 2024-2025学年苏少版(2024)初中美术七年级上册
- 2024-2025学年人教版七年级地理上学期 期中知识清单:第一章 地球
- 宠物饲料购销合同模板
- Unit4《This is my friend》-2024-2025学年三年级上册英语单元测试卷(译林版三起 2024新教材)
- 2024年江苏南京航空航天大学招聘36人历年高频500题难、易错点模拟试题附带答案详解
- 2024-2025学年秋季第一学期1530安全教育记录(第一、二、三周安全教育记录表)
- 第三单元达标练习(单元练习)2024-2025学年统编版语文一年级上册
评论
0/150
提交评论