1、二、实验实现的功能 5三、系统硬件设计 5四、系统软件设计 5五、实验过程中遇到的问题及解决方法 5实验一 流水灯实验1、实验目的1)简单IO引脚的输出2)掌握软件延时编程方法3)简单按键输入捕获判断二、实验实现的功能1) 开机是点亮12发光二极管,闪烁三下2) 按照顺时针循环依次点亮发光二极管3) 通过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计 系统设计主要以51核心板为基础,使用资源主要有:D1D12三色LED显示灯,分别对应单片机P20P27,P32P35端口;二排三列矩阵键盘,由单片机P36,P37,P05P07端口控制。四、系统软件设计程序主要分为两大模块,按键扫描与LE
2、D显示,按键扫描部分放在key()函数内,返回键值。LED显示放在主函数main()中。通过for循环实现多次显示,延时函数来控制显示时间。 预期效果:开机后所有LED闪烁,接着顺时针流动,结束后,按下1键LED逆时针流动,按下2键所有LED闪烁。部分源代码:void DelayMS(uint xms) uint i,j; for(i=xms;i0;i-) for(j=300;jj-);unsigned char key() unsigned char k=0; P0|=0xe0; P3&=0x3f; if(P0&0xe0)!=0xe0) DelayMS(100); P0|=0xe0; if(
3、P0& P3|=0xc0; P3&=0x7f; switch(P0&0xe0) case 0xe0: break; case 0x60: k=6;break; case 0xa0: k=5; case 0xc0: k=4; P3|=0xc0;=0xbf; k=3; k=2; k=1; while(P0& P0&=0xe0 ; W1 = 0; W2=!W2; return k; main() P2=0Xfb; uchar i,k; for(i=4; P2=0X00; LED9 =0; LED10=0; LED11=0; LED12=0; DelayMS(300) ; P2=0XFF; LED9
4、=1; LED10=1; LED11=1; LED12=1; P2=0XFE; for(i=7; P2=_crol_(P2,1); if(k=2) for(i=4; P2=code70; LED9=0; LED10=1; LED11=0; LED12=1; DelayMS(300) ; P2=0XFF; LED9=1; LED11=1; P2=code71; LED10=0; LED12=0; 5、实验过程中遇到的问题及解决方法 按键扫描返回值错误,经仔细调试,发现未加按键释放检测语句; LED最初显示时间较短,亮度较暗,修改延时程序,增长延时时间得以解决。 调试过程中经常存在个别LED显示异
5、常,仔细检查程序发现是程序控制语句错误。经过修改,问题得以解决。 指导老师签字: 日期:实验二 定时器或实时时钟实验一、实验目的1) 数码管动态显示技术2) 定时器的应用3) 按键功能定义1) 通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。2) 实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。上述二个功能至少完成一种功能。 系统设计主要以51核心板为基础,利用板上已有资源进行开发设计。使用外部资源主要有:4位8段共阴数码管,位选由单片机P00P03端口控制,段选由P1端口控制。 使用的单片机内部资源主要有:定时器模块;中断模块
6、; 程序主要有:定时器配置与中断函数、数码管显示、按键扫描、LED显示四大模块。定时器采用T1定时器,工作方式为模式1。 按键指令的执行才用switch结构,相应的键值执行相应的指令。中断函数内更新时间值time,数码管显示指令放在main函数中。开机后数码管显示00;这时通过按键设置倒计时初值(最大值99),1键4键分别为+-10,2键5键分别为+1;设置好初值,按下确定键3,开始倒计时。计时结束,LED灯闪烁,并等待下一次计时。 定时器初始化、开始函数 void T1_init() TMOD |=0x01;定时器设置 10ms in 12M crystal,工作在模式1,16位定时 TH0
7、=0x0dc; TL0=0x00; EA=1; 开总中断 void T1_star() ET0=1;开定时器0中断 TR0=1; 打开定时开关主函数: T1_init(); P0=0xff; while(1) keyscan(); k = key(); switch(k) case KM: 无任何按键按下 默认为0 返回 Display1(); break; case 1: time+=10; 1键设置十位加 time=time%99; 最大值99 取余循环 实时显示 k=KM; 键值置位 避免重复执行 可否删去 待验证 case 4: time-=10; 4键设置十位减 if(time=0)
8、time=0; case 2: time+=1; 2键设置个位加 case 5: time-=1; 5键设置个位减 if(time time=time%99; case 3: 3键确定 开启定时器、中断 second = time; T1_star(); Display1(); k=KM; break; default:中断函数:void tim(void) interrupt 1 using 1 ET0=0; TR0=0; 关闭中断 保证程序顺利运行 重新赋值 count+; if (count=100) count=0; time-; second秒减1 if(time=0) second
9、 这里添加定时到0的代码 ,可以是灯电路,继电器吸合等,或者执行一个程序 time=0; second减到0是重新赋值99 light(); if(time!=0) ET0=1;TR0=1; 定时时间未到 需要恢复中断五、实验过程中遇到的问题及解决方法 按键4和5的减功能不能实现,经调试发现,是按键扫描程序的问题,未加释放检测语句,修改后,问题解决。 数码管不能够显示,推测是延时较短所致,增加延时时间问题得以解决。倒计时结束后,LED显示不正常,并且不能够复位,过程只能执行一次,仔细检查程序,发现是由于中断程序内没有屏蔽中断响应,造成程序跑飞所致,经过修改,为题解决。实验三 双机通信实验UART 串行通信接口技术应用用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。串口收发模块;串口中断模块;程序主要有:定时器初始化模块,串口收发初始化模块,数码管显示模块;按键扫描模块;定时器采用T1定时器,工作方式为模式2,自动重装初值。 针对不同的键值发送相应的数值,采用switch结构。发送功能
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1