电子线路设计实验报告_李安琪.docx_第1页
电子线路设计实验报告_李安琪.docx_第2页
电子线路设计实验报告_李安琪.docx_第3页
电子线路设计实验报告_李安琪.docx_第4页
电子线路设计实验报告_李安琪.docx_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

xian jiaotong university电子线路设计 ii实验报告姓名:李安琪班级:自动化11学号:2110504002日期:2014年4月29日电子线路设计ii实验报告一、 实验内容:1创建一个工程将键盘阵列定义为0. 1. 2- e. f,编程实现键盘设置当前时间,再调用系统时钟,显示在led显示屏上(注意仔细阅读pcf8563资料),键盘设置当前日期显示在lcd显示屏上。2利用d/a转换通道(下行通道)实现锯齿波发生器;输出(15v)固定电压转换成(420ma)电流。3利用a/d转换通道(上行通道)实现数据采集,将采集信号显示在led屏上。程序要求分别具有平均值滤波、中值滤波和滑动滤波功能。二、 实验方法:通过在keil uvision2 中进行程序的编写和语法测试,之后通过电脑usb串口将程序下载到实验板上进行实际的程序运行,通过实际运行结果对程序进行调整。三、 实验程序:本次实验中,我将要验收的三个实验结合分别写了三个程序,我设计了主界面。除第二个程序考虑到要连续输出波形而选定后无法退回主界面外,其与两个程序均能通过按键功能退到主界面。以下为我编写的代码。(1) 日历时钟/-main-/#include #include #include#include#include#define uchar unsigned char#define uint unsigned intsbit be=p16;uchar nian,yue,ri,shi,fen,miao,xingqi,shialarm,fenalarm,flag=1;uchar code table1=20 - - ; /年月日起始地址依次为:02h,05h,08h,0chuchar code table2= : : a : ; /时分秒起始地址依次为:40h,43h,46h,4b,4eunsigned char xdata * ptr;void beep()be=1;delay(100);be=0;delay(100);be=1;delay(100);be=0;void main() uint i=0; uchar key; ea=1; ex1=1;i2c_init(); lcd_init();pcf_init();for(i=0;i=14;i+) writd(table1i);lcd_init2(0);for(i=0;i=14;i+) writd(table2i); writepcf_series(0x14,0x04,0x08,0x02,0x15,0x05,0x00) ; readpcf_series();xianshi(); while(1) key=keycan(&flag);xianshi1();if(flag=1)readpcf_series1();xianshi();void alarm() interrupt 2 writepcf(0x01,0x00); beep();/-bcd-/#include #define uchar unsigned char#define uint unsigned int#include uchar bcd1(uchar q)uchar bcd1=0;bcd1=q4;bcd1=10*bcd1+(q&0x0f) ;return bcd1;uchar bcd2(uchar q1)uchar bcd2=0;bcd2=q1/10;bcd2=4;q1=q1%10;bcd2=bcd2|q1;return bcd2;/-change-/#include #define uchar unsigned char#define uint unsigned int#include #include #include#include uchar num1=0,flag1;void change(uchar c,uchar *k) uchar dat; if(c=0x0c) *k=0; num1+; switch(num1) case 1 :writepcf(0x00,0x20);lcd_init2(6);checkbf(); writew(0x0f);break;case 2 :lcd_init2(3);checkbf(); writew(0x0f);break;case 3 :lcd_init2(0);checkbf(); writew(0x0f);break;case 4 :lcd_init1(0x0c);checkbf(); writew(0x0f);break;case 5 :lcd_init1(0x08);checkbf(); writew(0x0f);break;case 6 :lcd_init1(0x05);checkbf(); writew(0x0f);break;case 7 :lcd_init1(0x02);checkbf(); writew(0x0f);break;case 8 :lcd_init2(0x0b);checkbf(); writew(0x0f);break;case 9 :lcd_init2(0x0e);checkbf(); writew(0x0f);break;case 0x0a :num1=0;*k=1;writew(0x0c);/光标不闪readpcf_series(); xianshi();writepcf(0x00,0x00);break; if(num1!=0) if(c=0x0d) /加一调整 if(num1=1) lcd_init2(6); checkbf(); writew(0x0f); miao=bcd1(miao); miao+;if(miao=60)miao=0;miao=bcd2(miao);writepcf(0x02,miao);dat=miao4;writd(table0dat);dat=miao&0x0f;writd(table0dat); if(num1=2) lcd_init2(3); checkbf(); writew(0x0f); fen=bcd1(fen); fen+;if(fen=60)fen=0;fen=bcd2(fen);writepcf(0x03,fen);dat=fen4;writd(table0dat);dat=fen&0x0f;writd(table0dat); if(num1=3) lcd_init2(0); checkbf(); writew(0x0f); shi=bcd1(shi); shi+;if(shi=24)shi=0;shi=bcd2(shi);writepcf(0x04,shi);dat=shi4;writd(table0dat);dat=shi&0x0f;writd(table0dat); if(num1=4) lcd_init1(0x0c); checkbf(); writew(0x0f); xingqi+;if(xingqi=7)xingqi=0;writepcf(0x06,xingqi);writd(table0xingqi); if(num1=5) lcd_init1(0x08); checkbf(); writew(0x0f); ri=bcd1(ri); ri+;if(ri=32)ri=1;ri=bcd2(ri);writepcf(0x05,ri);dat=ri4;writd(table0dat);dat=ri&0x0f;writd(table0dat); if(num1=6) lcd_init1(0x05); checkbf(); writew(0x0f); yue=bcd1(yue); yue+;if(yue=13)yue=1;yue=bcd2(yue);writepcf(0x07,yue);dat=yue4;writd(table0dat);dat=yue&0x0f;writd(table0dat); if(num1=7) lcd_init1(0x02); checkbf(); writew(0x0f); nian=bcd1(nian); nian+;if(nian=99)nian=0;nian=bcd2(nian);writepcf(0x08,nian);dat=nian4;writd(table0dat);dat=nian&0x0f;writd(table0dat); if(num1=8) lcd_init2(0x0b); checkbf(); writew(0x0f); shialarm=bcd1(shialarm); shialarm+;if(shialarm=24)shialarm=0;shialarm=bcd2(shialarm);writepcf(0x0a,shialarm);dat=shialarm4;writd(table0dat);dat=shialarm&0x0f;writd(table0dat); if(num1=9) lcd_init2(0x0e); checkbf(); writew(0x0f); fenalarm=bcd1(fenalarm); fenalarm+;if(fenalarm=60)fenalarm=0;fenalarm=bcd2(fenalarm);writepcf(0x09,fenalarm);dat=fenalarm4;writd(table0dat);dat=fenalarm&0x0f;writd(table0dat); if(c=0x0e)/减一调整 if(num1=1) lcd_init2(6); checkbf(); writew(0x0f); miao=bcd1(miao);flag1=1;if(miao=0)flag1=0;switch(flag1) case 1: miao-; break;case 0:miao=59; break;default: break; miao=bcd2(miao);writepcf(0x02,miao);dat=miao4;writd(table0dat);dat=miao&0x0f;writd(table0dat); if(num1=2) lcd_init2(3); checkbf(); writew(0x0f); fen=bcd1(fen); flag1=1;if(fen=0)flag1=0;switch(flag1) case 1: fen-; break;case 0:fen=59; break;default: break; fen=bcd2(fen);writepcf(0x03,fen);dat=fen4;writd(table0dat);dat=fen&0x0f;writd(table0dat); if(num1=3) lcd_init2(0); checkbf(); writew(0x0f); shi=bcd1(shi); flag1=1;if(shi=0)flag1=0;switch(flag1) case 1: shi-; break;case 0:shi=23; break;default: break; shi=bcd2(shi);writepcf(0x04,shi);dat=shi4;writd(table0dat);dat=shi&0x0f;writd(table0dat); if(num1=4) lcd_init1(0x0c); checkbf(); writew(0x0f); flag1=1;if(xingqi=1)flag1=0;switch(flag1) case 1: xingqi-; break;case 0:xingqi=6; break;default: break; writepcf(0x06,xingqi);writd(table0xingqi); if(num1=5) lcd_init1(0x08); checkbf(); writew(0x0f); ri=bcd1(ri); flag1=1;if(ri=1)flag1=0;switch(flag1) case 1: ri-; break;case 0:ri=31; break;default: break; ri=bcd2(ri);writepcf(0x05,ri);dat=ri4;writd(table0dat);dat=ri&0x0f;writd(table0dat); if(num1=6) lcd_init1(0x05); checkbf(); writew(0x0f); yue=bcd1(yue); flag1=1;if(yue=1)flag1=0;switch(flag1) case 1:yue-; break;case 0:yue=12; break;default: break; yue=bcd2(yue);writepcf(0x07,yue);dat=yue4;writd(table0dat);dat=yue&0x0f;writd(table0dat); if(num1=7) lcd_init1(0x02); checkbf(); writew(0x0f); nian=bcd1(nian); flag1=1;if(nian=0)flag1=0;switch(flag1) case 1: nian-; break;case 0:nian=99; break;default: break; nian=bcd2(nian);writepcf(0x08,nian);dat=nian4;writd(table0dat);dat=nian&0x0f;writd(table0dat); /-delay-/#include #define uint unsigned intvoid delay(uint z) /延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms./delay(500);大约延时500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay1(unsigned int times) unsigned int i;for (i=0; itimes; i+);/-display-/#define uchar unsigned char#define uint unsigned intuchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 ;void display2(uchar dat,uchar wei)uchar xdata * ptn; ptn=0x8fff; * ptn =wei; ptn=0x9fff; * ptn =tabledat;delay(5);/-keyscan-/#define uchar unsigned char#include uchar keycan(uchar *r) uchar i, temp,num; uchar xdata * ptr; i=0x01;ptr=0x9fff; /消除对显示函数的干扰*ptr=0x00;ptr=0x8fff; * ptr =i; temp = * ptr; /取键盘io口的值temp=temp&0x0f;while(temp!=0x00)temp = * ptr; /取键盘io口的值 temp=temp&0x0f;while(temp!=0x00)switch(temp)case 0x01: num=0; break;case 0x02: num=1; break; case 0x04: num=2; break; case 0x08: num=3; break; while(temp!=0x00) /松手检测temp = * ptr; /取键盘io口的值 temp=temp&0x0f; i=0x02;ptr=0x9ffff; /消除对显示函数的干扰*ptr=0x00;ptr=0x8fff; * ptr =i; temp = * ptr; /取键盘io口的值temp=temp&0x0f;while(temp!=0x00)temp = * ptr; /取键盘io口的值 temp=temp&0x0f;while(temp!=0x00) switch(temp)case 0x01: num=4; break;case 0x02: num=5; break; case 0x04: num=6; break; case 0x08: num=7; break; while(temp!=0x00) /松手检测temp = * ptr; /取键盘io口的值 temp=temp&0x0f;i=0x04;ptr=0x8fff; * ptr =i; temp = * ptr; /取键盘io口的值temp=temp&0x0f;while(temp!=0x00)temp = * ptr; /取键盘io口的值 temp=temp&0x0f;while(temp!=0x00) switch(temp)case 0x01: num=8; break;case 0x02: num=9; break; case 0x04: num=10; break; case 0x08: num=11; break; while(temp!=0x00) /松手检测temp = * ptr; /取键盘io口的值 temp=temp&0x0f; i=0x08;ptr=0x8fff; * ptr =i; temp = * ptr; /取键盘io口的值temp=temp&0x0f;while(temp!=0x00)temp = * ptr; /取键盘io口的值 temp=temp&0x0f;while(temp!=0x00) switch(temp)case 0x01: num=12; break;case 0x02: num=13; break; case 0x04: num=14; break; case 0x08: num=15; break; while(temp!=0x00) /松手检测temp = * ptr; /取键盘io口的值 temp=temp&0x0f;change(num,r); return num;/-lcd-/#include #include unsigned char xdata * ptr;void checkbf(void) unsigned int i; while(1) ptr=0xaff1; i=*ptr; i &= 0x80; if(i=0) break;void writew(unsigned int a) ptr=0xaff0;*ptr=a;void writd(unsigned char key_asc2) checkbf(); ptr=0xaf02; *ptr=key_asc2;void lcd_init(void) checkbf(); writew(0x38);checkbf();writew(0x01);checkbf();writew(0x06);checkbf();writew(0x0c);checkbf();void lcd_init1(unsigned char b)checkbf(); writew(0x0c); checkbf();writew(0x80+b);void lcd_init2(unsigned char a)checkbf(); writew(0x0c); checkbf();writew(0xc0+a);/-pcf-/#include #define uchar unsigned char#define uint unsigned intuchar nian,yue,ri,shi,fen,miao,xingqi,shialarm,fenalarm;sbit sda=p11;sbit scl=p10;void start(void) sda=1; delay1(6); scl=1; delay1(6); sda=0; delay1(6); scl=0; delay1(6);void i2c_init()scl=1;delay1(6);sda=1;delay1(6);void respons() sda=0; delay1(6); scl=1; delay1(6); scl=0; delay1(6); sda=1; delay1(6);void noack(void) sda=1; delay1(6); scl=1; delay1(6); scl=0; delay1(6);void stop(void) scl=0; delay1(6); sda=0; delay1(6); scl=1; delay1(6); sda=1; delay1(6);uchar read_byte()uchar i,j,k;scl=0;delay1(6);sda=1;delay1(6);for(i=0;i8;i+) scl=1; delay1(6); j=sda; k=(k1)|j; scl=0; delay1(6);return k;bit write_byte (uchar input) uchar temp; for(temp=8;temp!=0;temp-) sda=(bit)(input&0x80); delay1(6); scl=1; delay1(6); scl=0; delay1(6); input=input1; return 1; delay1(1);void writepcf (uchar romaddress,uchar da) start(); write_byte (0xa2); respons(); write_byte (romaddress); respons(); write_byte(da); respons(); stop(); delay1(1);void writepcf_series(uchar nian1,uchar yue1,uchar ri1,uchar xingqi1,uchar shi1,uchar fen1,uchar miao1) writepcf(0x08,nian1); writepcf(0x07,yue1); writepcf(0x06,xingqi1); writepcf(0x05,ri1); writepcf(0x04,shi1); writepcf(0x03,fen1); writepcf(0x02,miao1);void readpcf_series () start(); write_byte (0xa2); respons(); write_byte (0x02); respons(); start(); write_byte (0xa3); respons(); miao=read_byte()&0x7f; respons(); fen=read_byte()&0x7f; respons(); shi=read_byte()&0x3f; respons(); ri=read_byte()&0x3f; respons(); xingqi=read_byte()&0x07; respons(); yue=read_byte()&0x1f; respons(); nian=read_byte(); respons(); fenalarm=read_byte()&0x7f; respons(); shialarm=read_byte()&0x3f; noack(); stop(); delay1(1);void readpcf_series1 () start(); write_byte (0xa2); respons(); write_byte (0x02); respons(); start(); write_byte (0xa3); respons(); miao=read_byte()&0x7f; respons(); fen=read_byte()&0x7f; respons(); shi=read_byte()&0x7f; noack(); stop(); delay1(1);void pcf_init()writepcf(0x00,0x00);writepcf(0x01,0x00);/-显示-/#include #include #define uchar unsigned char#define uint unsigned int#includeuchar code table0= 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46 ;void xianshi()uchar dat;lcd_init1(2);/年 dat=nian4 ;writd(table0dat);dat=nian&0x0f;writd(table0dat);lcd_init1(5);/月 dat=yue4 ;writd(table0dat);dat=yue&0x0f;writd(table0dat);lcd_init1(8);/日 dat=ri4 ;writd(table0dat);dat=ri&0x0f;writd(table0dat);lcd_init1(0x0c);/星期writd(table0xingqi); dat=shi4 ;display2(dat,0x80);dat=shi&0x0f;display2(dat,0x40); dat=fen4 ;display2(dat,0x10);dat=fen&0x0f;display2(dat,0x08); dat=miao4 ;display2(dat,0x02);dat=miao&0x0f;display2(dat,0x01);lcd_init2(0);/时 dat=shi4 ;writd(table0dat);dat=shi&0x0f;writd(table0dat);lcd_init2(3);/分 dat=fen4 ;writd(table0dat);dat=fen&0x0f;writd(table0dat);lcd_init2(6);/秒 dat=miao4 ;writd(table0dat);dat=miao&0x0f;writd(table0dat); lcd_init2(0x0b);/时alarm dat=shialarm4 ;writd(table0dat);dat=shialarm&0x0f;writd(table0dat);lcd_init2(0x0e);/分alarm dat=fenalarm4 ;writd(tab

温馨提示

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

评论

0/150

提交评论