




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安交通大学电子信息与工程学院自动化科学与技术系电子线路设计专题实验报告实验名称:电子线路设计专题实验实验者姓名:XX实验者学号:21105040XX所在班级:自动化1X报告完成日期:2014年5月11日一、实验目的;(1) 熟悉单片机原理;(2) 掌握开发板上常见芯片的功能与用法;(3) 掌握单片机的开发软件:KELL(4) 应用单片机,做一些简单的小应用(电子时钟等)、实验内容:(1) 创建一个工程将键盘阵列定义为 0. 1.2- E. F,编程实现键盘设置 当前时间,再调用系统时钟,显示在 LED显示屏上(注意仔细阅读 PCF8563资 料),键盘设置当前日期显示在 LCD显示屏上。(2
2、) 利用D/A转换通道(下行通道)实现锯齿波发生器;输出(15V) 固定电压转换成(420mA)电流。(3) 利用A/D转换通道(上行通道)实现数据采集,将采集信号显示在 LED屏上。程序要求分别具有平均值滤波、中值滤波和滑动滤波功能。三、开发板简介:.TPIJP5话筒3X-1泄比rexI电压输入g外按收红外韭射外榔壮游(炉41 JTAG卜型I丨机般图1 PH-I型51MCU学习系统实物照片简介:ZHF-1学舟系统采HJ SSTS9E564HD作為系统的孩心弋外发包括用并存总线呃幼的B位8段数码律4X4键盘、字符型LCD (LCW21).外扩32KRAI (62256);册T总线販 动的 1Q
3、 位 ADC(TI.C1549)J0 位 I)肛(TLGiGlS);厂C总线驱动的外扩 EZPROM (AT24C02> H历时钟芯片(PCF8563):单总线(1-iIRE)駆动的数字式温度传感器DS18B20: MAX232 的串口通讯;基于TDA2822M放大MIC的音频功放*红外线发射和接收装宣;5苗信号发生 和藝形电路:JUG卜玻接口(用T S5I):蝇鸣器。所石的这些器件卑本UW 7 51MC1J的所 有接口四、功能实现与关键代码:(1)电子时钟:在这一部分,有几个很重要的的程序模块:包含 1602初 始化、写控制字、写字符等几个函数的 1602.h;包含根据??总线协议编写
4、的字 节及多字节传输和接收函数的 viic.h ;实现键盘读取操作的key.h;实现不断读取 时间芯片的值并显示在1602和led上显示日期时间的read函数等.以下是这几个 重要的模块以及主函数程序。1602.h (包含1602初始化、写控制字、写字符等函数)*检测是否忙、写控制字、写数据等*void WriteW(ui nt a) ptr=0xAFF0;*ptr=a;void CheckBF(void) uint i;while(1) ptr=0xAFF1; i=*ptr;i &= 0x80; if(i=0) break;void LCDni t(void) CheckBF();W
5、riteW(0x38);CheckBF();WriteW(0x01);CheckBF();WriteW(0x06);CheckBF();WriteW(0x0F);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 (包含根据??总线协议编写的字节及多字节传输和接收函数)/*字节数据传送函数函数原型 : void Se
6、ndByte(uchar c);功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作 .(不应答或非应答都使 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();_Nop();_Nop()
7、;_Nop();SCL=0;_Nop();_Nop();SDA=1;_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA=1)ack=0;else ack=1;SCL=0;_Nop();_Nop();/* 置时钟线为高,通知被控器开始接收数据位 */*保证时钟高电平周期大于4卩s*/*8 位发送完后释放数据线,准备接收应答位 */*判断是否接收到应答信号 */*字节数据传送函数函数原型 : uchar RcvByte();功能 : 用来接收从器件传来的数据 ,并判断总线错误 (不发应答信号 ), 发完后请用应答函数。*/uchar RcvByte()u
8、char retc;uchar BitCnt;retc=0;SDA=1; /* 置数据线为输入方式 */for(BitCnt=0;BitCnt<8;BitCnt+)_Nop();SCL=0; /* 置时钟线为低,准备接收数据位 */_Nop();_Nop();/*时钟低电平周期大于4.7卩s*/_Nop();_Nop();_Nop();SCL=1;/*置时钟线为高使数据线上数据有效 */_Nop();_Nop();retc=retc<<1;if(SDA=1)retc=retc+1; /* 读数据位 ,接收的数据位放入 retc 中 */_Nop();_Nop();SCL=0;
9、_Nop();_Nop();return(retc);/*应答子函数 原型: 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();/*时钟低电平周期大于4卩s*/_Nop();_Nop();_Nop();SCL=0;/*清时钟线,钳住 I2C 总线以便继续接收 */_Nop();_Nop();/*向有子地址器件发送多字节数据函数函数原型 :
10、bit ISendStr(uchar 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);if(ack=0)return(
11、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 表示操作成功,否则操作有误。注意: 使用前必须已结束总线。 */
12、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+;*s=RcvByte();Ack_I2c(1);Stop_I
13、2c();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 GetScanKey(void) unsigned char
14、 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; temp &= 0x0f; if (temp!=0x00) key = i<<4; key|=temp; break;return key;/取键盘 IO 口的值 /屏蔽高四位 /是否有有效键值/取行数位的值并将其放入返回值高 4 位/列数位的值放入返回值低 4 位/返回行位(高四)和列
15、位(低四)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 key;el
16、se/有按键有效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_Tablekey&
17、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 read()u
18、nsigned 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_table6=rd3
19、/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=0x9fff;* ptr =qid
20、uan_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;*ptr=0x40;Delay_ms(1);ptr=0x9fff;* ptr =
21、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_table3);WritD(0x20);WritD(0x20);WritD(0x20);WritD(AS
22、C2_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(); for(i=0;i<13;i+) WritD(tishi_table1i);Delay_ms(200); LCD_Init
23、2(); 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(unsigned int dat)unsigned char x;CS=1;SCLK=0;Delay_us(500);DIO=
24、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();Key_Init();ptr = 0x8FF;*ptr = 0x00;/屏幕全部归位Delay_s(4);/显示屏清Check
25、_Busy(); write_com(0x01); Check_Busy();while (1)for(i=0;i<6280;i+)vol=500*(sin(i*0.01)+1) / tlc5615(vol);(3)利用A/D转换通道(上行通道)实现数据采集,将采集信号显示在LED 屏上。这一部分重要的代码片段有:对 1549 芯片的操作,将电压显示在 led 上(三 位小数)的 display 函数。以下粘贴部分代码段:adc_1549(不断采集端口数据,并送至CPU)int tlc1549()int data_out=0;unsigned char i;DIO = 0;SCLK=0;
26、CS=1;_nop_();CS = 0; /startfor(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 xdata *ptr;if(disp2>=0x5)disp2=0x5;disp1=0x0;disp0=0x0;ptr=
27、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(); /*write_date(ASC2_Valuedisp2);Check_Busy(); write_date(0x2e);Check
28、_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);write_date(0x20);write_date(0x20);write_date(0x01);write_date(0x20);wr
29、ite_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);/显示屏清Check_Busy(); write_com(0x01); Check_Busy();while (1)function = GetKey();if
30、 (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_ave2+vol_ave3)/4; ave_pointer = ave_pointer + 1; /LCD_Init1(xianshi1); br
31、eak;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(xianshi2);break;case 4:while(1);br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民爆安全培训课件
- 船舶机舱考试题库及答案
- 测量考试题库及答案解析
- 特色新质生产力发展模式与案例
- 发展新质生产力的主要做法
- 民族舞课程课件
- 全球新质生产力的发展现状
- 2025年微生物学临床微生物培养鉴定操作评估试卷答案及解析
- 三中全会新质生产力解读
- 2025年胸心外科胸部手术术中护理操作考核答案及解析
- 《住房租赁条例》培训解读课件
- 2025版医疗纠纷委托代理行政复议委托书
- 三角形的概念 课件 2025-2026学年人教版(2024)数学八年级上册
- 神经根型颈椎病中医循证实践指南-公示稿
- 2025年秋季第一学期开学典礼校长致辞:在历史的坐标上接好时代的接力棒(1945→2025→未来:我们的责任接力)
- 中国邮政集团工作人员招聘考试笔试试题(含答案)
- 工程竣工移交单(移交甲方、物业)
- 2025年高考语文全国一卷试题真题及答案详解(精校打印)
- 《预防未成年人犯罪》课件(图文)
- 义务教育语文课程标准(2022)测试题带答案(20套)
- 最新安徽省小学学生学籍表5页
评论
0/150
提交评论