第7组(单片机实验总结)_第1页
第7组(单片机实验总结)_第2页
第7组(单片机实验总结)_第3页
第7组(单片机实验总结)_第4页
第7组(单片机实验总结)_第5页
已阅读5页,还剩159页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

......广东药学院班级

实验报告总结生物医工(电仪器组别第

组长:陈连组员陈春明骆伟伟2013年12月15日专业.专注

.......实三单片机口控制实验要求利用口输出口接八只发光二极编程序使光二极管循环点亮或者产生有一定规律的花花要求如提:每一个要求编一个程):①第一个发光管以间隔200ms闪烁#include<reg52.h>#defineunsignedvoiddelayms(uint);sbitvoid{while(1){led1=0;delayms(200);led1=1;delayms(200);}

//1专业.专注

.......}voiddelayms(uintxms){uintfor(i=xms;i>0;i--)for(j=110;j>0;j--);}②8个光管由上至下间隔流动其每管亮灭亮蜂鸣器响灭时关闭蜂鸣器一重复下#include<reg52.h>#include<intrins.h>#defineunsignedvoiddelayms(uint);uintsbitvoid{P2=0xff;aa=0xfe;while(1)

//2专业.专注

.......{P2=aa;delayms(500);P2=0xff;delayms(500);aa=_crol_(aa,1);}}voiddelayms(uintxms){uintfor(i=xms;i>0;i--)for(j=110;j>0;j--);}③8个光管来回流第管亮流时让蜂鸣器发滴滴声#include<reg52.h>#include<intrins.h>#defineunsignedvoiddelayms(uint);uintaa,i;

//3专业.专注

.......sbitvoid{P1=0xff;aa=0xfe;delayms(500);while(1){for(i=0;i<8;i++){P1=aa;delayms(100);delayms(100);aa=_crol_(aa,1);if(aa==0xfe)break;}aa=0x7f;for(i=0;i<8;i++){专业.专注

.......aa=_cror_(aa,1);P1=aa;delayms(100);delayms(100);if(aa==0xfe)break;}}}voiddelayms(uintxms){uintfor(i=xms;i>0;i--)for(j=110;j>0;j--);}④用个发管演示出8位进制数累加过,结合两个开(一加一实加减运算#include<reg52.h>//4#define#defineunsigned专业.专注

.......sbitsbitucharvoiddelayms(uint{intfor(i=z;i>0;i--)for(j=110;j>0;j--);}void{while(1){a=0;if(s0==0){while(a!=256){delayms(500);}专业.专注

.......}a=0xff;if(s1==0){while(a!=0){a--;delayms(500);}}}}⑤个光管间隔由至下,再由下至上再重复一次,然后全部熄灭再以间全部闪烁5。重复此过程#include<reg52.h>#include<intrins.h>#defineunsignedvoiddelayms(uint);uintvoid

//5专业.专注

.......{while(1){a=0xfe;for(j=0;j<2;j++){for(i=0;i<8;i++){a=_crol_(a,1);delayms(200);}a=0x7f;for(i=0;i<7;i++){a=_cror_(a,1);delayms(200);}}P1=0xff;delayms(500);专业.专注

.......for(i=0;i<5;i++){delayms(300);P1=0xff;delayms(300);}}}voiddelayms(uintxms){uintfor(i=xms;i>0;i--)for(j=110;j>0;j--);}⑥间隔一次一个管亮流动一第次两个管亮流动依到个管亮然后重复整个过程#include<reg52.h>#include<intrins.h>#defineunsignedvoiddelayms(uint);

//6专业.专注

.......uintvoid{while(1){a=0xfe;for(i=0;i<8;i++){a=_crol_(a,1);delayms(500);}delayms(500);a=0xfc;for(i=0;i<4;i++){a=_crol_(a,2);delayms(500);}delayms(500);a=0xf8;专业.专注

.......for(i=0;i<3;i++){a=_crol_(a,3);delayms(500);}delayms(500);a=0xf0;for(i=0;i<2;i++){a=_crol_(a,4);delayms(500);}delayms(500);a=0xe0;for(i=0;i<2;i++){a=_crol_(a,5);delayms(500);}专业.专注

.......delayms(500);for(i=0;i<2;i++){a=_crol_(a,6);delayms(500);}delayms(500);for(i=0;i<2;i++){a=_crol_(a,7);delayms(500);}delayms(500);delayms(500);}}voiddelayms(uintxms)专业.专注

.......{uintfor(i=xms;i>0;i--)for(j=110;j>0;j--);}⑦间300ms先奇数亮再偶数,循环三一灯上下循环三次两分从两边往中间流动三次再从中间往两边流动三;8个部闪烁次关发光程停止#include<reg52.h>#include<intrins.h>#defineunsignedvoiddelayms(uint);uintvoid{for(i=0;i<3;i++){

//7delayms(1000);delayms(1000);}P1=0xff;delayms(500);for(i=0;i<3;i++){a=0xfe;j=0;j<7;j++){专业.专注

.......delayms(500);a=_crol_(a,1);}j=0;j<8;j++){delayms(500);a=_cror_(a,1);}}P1=0xff;delayms(500);for(i=0;i<3;i++){delayms(1000);delayms(1000);delayms(1000);delayms(1000);}P1=0xff;delayms(500);

for(i=0;i<3;i++){delayms(1000);delayms(1000);

10uFLED-YELLOW

27pF27pF1100100100

CRYSTAL

19189

XTAL1XTAL2RSTPSENALEEAP3.6/WR

3938373635343332delayms(1000);专业.专注

.

LED-YELLOWLED-YELLOW

100100100100100......delayms(1000);}P1=0xff;delayms(500);for(i=0;i<3;i++){delayms(1000);P1=0xff;delayms(1000);}while(1){P1=0xff;}}voiddelayms(uintxms){uintfor(i=xms;i>0;i--)j=110;j>0;j--);}心得体验:

本实验主要学习使用单片机的

I/O口控制发光二极管的亮灭同时要熟悉延时子函数的调,熟练进行移位操,比如左移<,移>>,等指令应该注意的是单片机上电时没有人为地控制I/O口的状态,所有未控制的I/O都默认为高电频。刚开始学习单片机这门课程因为学过C语言,所以还是稍微能上手的。习实验三从中掌握了I/O口的工作原理和它的数据输出方式,通过P1口观察程序的运行而且掌握了二个新软件proteuisis,专业.专注

.......可以进行仿真实,也和单片机实物结合理论联系实际提高动手能,而全面掌握单片机的应。而在实验三,首先要理解题目要,相应地去编,要有自己的思,先把大概的脉络写出来,要不断地去调,最终才可以满足题目要求,在仿真和实物单片机都能实现需要的现象专业.专注

.......7实四码控实1.AT89C51读位开态0~,并示数管共按共阴#include<reg52.h>#include<stdio.h>#define#defineunsignedsbitsbitsbitsbituintuchar

codex0e};void{专业.专注

.......P0=table[m];}示#include<reg52.h>

数管共阴

()#include<stdio.h>#define#defineunsigneduint

//1//2//3//4//5uchar

codeucharwela[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};voiddelayms(uintxms){uintfor(i=xms;i>0;i--)j=110;j>0;j--);}void{while(1){for(i=0;i<6;i++){P2=wela[i];P0=dula[i];delayms(500);P0=0xff;//消delayms(100);

//P1}}}专业.专注

.......心体验:本实验主要是熟练掌握口对数码管显示的控制,在编写程序,应先确定选用的数码管是共阴还是共阳数码管,不同的数码管使用不同的编码数码管的动态显示中般都要上一句即是消影。如果不进行消影,就会出现显示混乱的现象。学习了和的使用方法,要把、P1口和P2口在keil中调出来调试观察和值(高低电平)变化,由于买的单片机是内部接线固定好,能通过修改程序和仿真图去满足实验要,比其他同学所做的工作更多也更复不过我觉得这样可以让我更深入地去了解了单片机的结构专业.专注

.......8实五告水中控、利用定/计器T0从出周期为的波让光二极管以闪烁设晶振频率为。#include<reg52.h>//1#defineunsignedsbituintvoid{EA=1;while(1){if(num==20){led=~led;}}}voidinterrupt1{}专业.专注

.......、利用定/计器产定时时由P1控制个发二极管使个指灯依次一个一个闪动闪频率为10次灯依次亮一遍为一个周,循环#include<reg52.h>

//2单数码管共阳#include<intrins.h>#defineunsigned#defineuintvoid{//T1EA=1;

专业.专注

.......i=0;a=0xfe;while(1){if(num==7){P0=dula[i];i++;}if(num==10){P1=0xff;}if(i==10){i=0;a=_crol_(a,1);}//P1=0xff;}}voidinterrupt3{专业.专注

.......}、用定时器以间隔在位码管上依次显示、、3F重电路自己设计。#include<reg52.h>//3共#defineunsigned#defineuchar

code1};ucharwela[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};uintnum,i,j;void{EA=1;i=0;专业.专注

.......while(1){if(num==10){P2=wela[j];//0选位选P3=dula[i];//段i++;if(i==16){=0;if(j==6)}}}}voidinterrupt1{专业.专注

.......}选:、时存在P1为出优级于均电平触发要求主序个光二极管、右移动轮再闪烁次INT0的断服务程序控制P1口的个光二极管闪烁5次INT1的断服务程序控制口8个光二极管左右移动轮所计数通数码管显)信灯优先级控制程序流程图如图8-5所。选做单数码管共阳#include<intrins.h>#defineunsigned#defineucharuinta,b,num0,num1,i,j;sbit

专业.专注

.......sbitvoiddelayms(uintxms){uintfor(i=xms;i>0;i--)j=110;j>0;j--);}void{外部中断为优先为EA=1;全允许中断EX1=1;开部中断1EX0=1;开部中断0i=0;=0xfe;=0xff;专业.专注

.......while(1){j=0;j<2;j++)//移2轮{for(i=0;i<7;i++)//左{delayms(200);a=_crol_(a,1);}for(i=0;i<7;i++)//右{delayms(200);a=_cror_(a,1);}}j=0;j=0;j<2;j++)//闪次{专业.专注

.......delayms(200);delayms(200);}}}voidinterrupt{b=0xff;while(1){P0=dula[num0];delayms(200);delayms(200);if(num0==5){while(1){专业.专注

.......}}voidinterrupt{a=0xfe;while(1){for(i=0;i<7;i++)//左{delayms(200);a=_crol_(a,1);专业.专注

.......}for(i=0;i<7;i++)右{delayms(200);a=_cror_(a,1);}P0=dula[num1];if(num1==3){while(1){}}}}实五得由于先要/计,又要编程去实现要专业.专注

.......。序。9.实验方发器(用内部定时计器0定时功,实现周期为400us的波。#include<reg52.h>()#define#defineunsignedsbitsbit{启T0EA=1;专业.专注

.......=0;while(1){if(num==2){=!a;=!b;}}}voidT0_time()interrupt{}()用内部定时计器的时功能在P3.0引上产生周期为的方波输,定时器采用查询和中断两种方式实#include<reg52.h>()#define专业.专注

.......#defineunsignedsbit{启T1EA=1;a=0;while(1){if(num==10){a=!a;}}}voidT1_time()interrupt{}()用内部定时计器的式2在引上产生矩形,高平为低专业.专注

.......平为#include<reg52.h>()#define#defineunsignedsbit{启T0EA=1;a=0;为什么在里面序不能实{}}voidT0_time()interrupt{{a=!a;}{专业.专注

.......a=!a;}}()同时用两个时器控制蜂鸣器发定器控制频率定时器1控同个频率持续的时间间隔次输出,,()的波#include<reg52.h>//(4)#include<intrins.h>#defineunsigned

//包有左右循环移位子函数的库//宏义#definesbitsbitucharuinti,f,flag;ucharvoid{

//主数i=0;//设定时器定器为作方式1EA=1;

//开中断//开时器0中启定时器0专业.专注

.......while(1){if(tt=f){

//待中断产生tt=0;=!a;=!b;}if(flag==6){flag=0;i++;}f=FB[i];}}voidinterrupt1定器中断{//进断先把定时器中关,防止内部程序过多而造成中断丢失tt++;}6、选----计数方,原理如图9-10所示流程如、9-12、示()用内部定时计器的计数工在方式实现计数10次产中断使所接发光二极管点亮计用数码管显需加数码)。#include<reg52.h>//选做1)单码管共阳

接按键于专业.专注

.......#include<intrins.h>#defineunsigned#defineucharvoidinterrupt3定器中用来产生300微时间定{flag++;}

sbitucharvoid专业.专注

.......{TMOD作于计数器方式2//计值设为当有按下,负跳变会使计数器初值加,//计数器立即溢出而触发计数中断计中断函数将计数变量Count累加EA

允许断开总中断启T1while(1){if(Count==9)led=0;else}专业.专注

.......}voidinterrupt3{

//T1计器中断函数Count=(Count+//计控制在内无需再加if语句制值}()用内部定时计器1的计数功,工作在方式8位发二极管以二进制显示按键次数#includevoid{

//选做单码管共阳TMOD//设T1为数,工作于方式最计数值为//初为0启while(1){显计数值低字节//显计数值高字}}专业.专注

.......实六得实验通用T1的两种用

掌握TMOD、的虚形时法1

实验七键盘计与显实验将端口分别连接8按键号从,端口连接LED数码管码管上显示相应的键值果#include<reg52.h>#define专业.专注

.......#defineunsignedsbitsbitsbitsbitsbitsbitsbitsbituchartable[]={0x3f,0x06,0x5b,0x4f,0x7f};voiddelayms(uint);ucharvoiddelayms(uint{uintfor(i=xms;i>0;i--)j=110;j>0;j--);}void专业.专注

.......{if(k1==0){delayms(10);if(k1==0){while(!k1);}}if(k2==0){delayms(10);if(k2==0){while(!k2);}}if(k3==0){delayms(10);专业.专注

.......if(k3==0){while(!k3);}}if(k4==0){delayms(10);if(k4==0){while(!k4);}}if(k5==0){delayms(10);if(k5==0){while(!k5);专业.专注

.......}}if(k6==0){delayms(10);if(k6==0){while(!k6);}}if(k7==0){delayms(10);if(k7==0){while(!k7);}}if(k8==0){专业.专注

.......delayms(10);if(k8==0){while(!k8);}}}void{while(1){keyscan();P2=table[num];}}专业.专注

.......2、

一个4x4的矩阵式键盘P3.0~P3.3作为行线以P3.4~P3.7作为列,在数码管上显示每个按键相应的键值0~F”。实验代码与结果:#include#definevoid{while(1){P3=0xfe;专业.专注

.......if(P3==0xee){P2=0x3f;}if(P3==0x7e){P2=0x4f;}P3=0xfd;if(P3==0xeb){P2=0x7f;}}}专业.专注

.......:

进行这次实验的过程,先了解了接口电路的工作原理也了解了键盘和显示器的接口方。中键盘分为独立式和矩阵式按,独立式按键每个口线接一个按键,而矩阵式键盘由行线和列线组成按键位置交叉点。实验七分别是验证独立式按键和矩阵式按键。该编程难度不,注意好交叉式按键的排列即可。

实验八并行换实验序转换DAC0832进波三波方波波果#include<reg52.h>#defineucharunsignedchar专业.专注

.......#defineuintunsignedintsbitled1=P1^1;sbitdawr=P3^6;sbitdacs=P2^7;sbitkey1=P1^0;sbitkey2=P1^2;sbitkey3=P1^4;sbitkey4=P1^6;ucharcodesin[272]={//出电压从0到最大值正弦波1/4部分0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,//出电压从最大值到(正弦波1/4分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,专业.专注

.......0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//出电压从0到最小值正弦波1/4分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,//出电压从最小值到(正弦波1/4分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,专业.专注

.......0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharval,flag,aa,i;voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){EA=1;IT0=0;dacs=0;dawr=0;P0=0;EX0=1;}voidexter0()interrupt专业.专注

.......{ucharval,flag;EX0=0;while(1){if(key1==0){delayms(10);if(key1==0){while(key2!=0&key3!=0&key4!=0){if(flag==0){val+=15;P0=val;if(val==255){delayms(500);flag=1;}专业.专注

.......delayms(50);}else{val-=15;P0=val;if(val==0){delayms(500);flag=0;}delayms(50);}}while(!key1);}}if(key2==0)专业.专注

.......{delayms(10);if(key2==0){while(key1!=0&key3!=0&key4!=0){if(flag==0){val+=15;P0=val;if(val==255){flag=1;}delayms(50);}else{val-=15;P0=val;if(val==0){专业.专注

.......flag=0;}delayms(50);}}while(!key2);}}if(key3==0){delayms(10);if(key3==0){while(key2!=0&key1!=0&key4!=0){val=255;P0=val;delayms(500);val=0;专业.专注

.......P0=val;delayms(500);}while(!key3);}}if(key4==0){delayms(10);if(key4==0){while(key2!=0&key3!=0&key1!=0){if(i<272){P0=sin[i];delayms(5);i++;}专业.专注

.......elsei=0;}while(!key4);}}}}专业.专注

.......2、

用DAC0832实现/到,经其转换成模拟量输出输出图形为鱼形。果#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitdawr=P3^6;sbitdacs=P2^7;ucharcodedesk[98]={0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x80,0x80,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,专业.专注

.......0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,};voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){ucharfish,i;dacs=0;dawr=0;EA=1;EX0=1;//外部中断0TCON=0x01;i=0;fish=0x40;while(1){专业.专注

.......if(i<98)//0x30{P0=desk[i];delayms(1);P0=256-desk[i];delayms(1);i++;}if(i>=97&&i<105){P0=fish;delayms(1);P0=256-fish;delayms(1);i++;fish-=5;}if(i>=105){i=0;fish=0x40;}专业.专注

.......}}实验总结:做做实验前先查阅资料,认识D/A转换器DAC0832工作原理,也知道由R-2R电阻网络模拟开关、运算放大器和参考电压四大部分组成掌握了转换器DAC8032单片机的接口方法。编程时,在网上查询了个波的编写程序方式熟悉后,再自己试着编程,不断地修改才把程序写出来在做鱼形波形,先把鱼的构造用数组列出来,然后在程序中引用,得以完成。实验九A/D转器1、模拟信号进行转换,转换结果送七段数码管显示同时用发光二极管显示转换值的二进制,5LED态显示前2位显“字样。果#include<reg52.h>专业.专注

.......#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharUcharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极sbitSTART=P3^6;sbitEOC=P3^3;sbitOE=P3^7;sbitling=P2^0;sbitALE1=P2^1;sbitALE2=P2^2;sbitDIN=P3^0;sbitCLK=P3^1;voiddisplay();voidjilian(uint);voidshijinzhi();ucharshuju;voidmain(){ling=0;P0=0x02;专业.专注

.......ALE1=1;ALE1=0;ALE2=0;//设置ADC的输入地址为IN2P0=0xff;OE=0;while(1){START=0;START=1;//START=0;//启动while(EOC==1);//OE=1;shuju=P0;P1=shuju;ALE2=0;display();ALE2=1;/*ALE2=0;shijinzhi();ALE2=1;*/专业.专注

.......}}voidjilian(uint{ucharj,anta;anta=z;for(j=0;j<8;j++){=0;=anta&0x01;CLK=1;anta=anta>>1;}}voiddisplay(){ucharbai,shi,ge;bai=shuju/100;shi=shuju%100/10;ge=shi%10;jilian(table[ge]);jilian(table[shi]);专业.专注

.......jilian(table[bai]);jilian(table[13]);jilian(table[10]);}voidshijinzhi(){ucharbai,shi,ge,gbw,dbw;bai=shuju/100;shi=shuju%100/10;ge=shi%10;gbw=shuju/16;dbw=shuju%16;jilian(table[ge]);jilian(table[shi]);jilian(table[bai]);jilian(table[dbw]);jilian(table[gbw]);}专业.专注

.......实验总结,也了解/。而该实理然求1、

实验十串行通信实验设的串口工作方0,串行口输出内存单元的数据,并且8位发光二极管逐个显示二进制值。果#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharuchara,b,c;voiddelayms(uintz)专业.专注

.......{inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}voidmain(){SCON=0;EA=ES=while(1){a+=1;SBUF=a;ES=0;delayms(500);if(a==256)a=0;if(TI==1)//数据发送完毕TI会置1TI=0;ES=1;}专业.专注

.......}2、

设置AT89C51的串口工作在方式,接收从74LS165输出的数据,并将数据送P0口的发光二极管显示果#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitSK=P3^2;voiddelayms(uintxms){uchari,j;for(j=xms;j>0;j--)for(i=110;i>0;i--);}voidmain(){//SCON=0X10;//行口工作在方式0SM0=0;专业.专注

.......SM1=0;REN=1;while(1){SK=0;//数,读入并行输入口的位数据SK=1;//位,并口输入被封锁串行转换开始while(RI==0);//等待接收完一字节数据RI=0;//收完成,RI置0P0=~SBUF;//接收到的字节显示在P0端口显示的值与拨码开关对应delayms(20);}}专业.专注

.......选作题:某控制系统有甲、乙两个单片机,甲机首先P1指拨开关数据载入,然后经过将数据传送给乙机乙机将接送的数据存入,再由SBUF载入累加器,并输出到P1口点亮相应端口的LED实验代码与结果:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharvoiddelayms(uintz){inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}voidmain(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;专业.专注

.......SM1=1;EA=1;ES=1;while(1){a=P1;SBUF=a;while(!TI);TI=0;delayms(1);}}#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharvoiddelayms(uintz){inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}专业.专注

.......voidmain(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;while(1){a=SBUF;P1=a;while(!RI);RI=0;delayms(1);}}专业.专注

.......

首先熟读实验预备知,了解51单片机串行通行接,解了它的管脚、RXD还有串行接口寄存器和串行接口工作方式编程时,要对串行中断和工作方式0有很详细的了解知道74LS164引脚的用处,也要注意串口中断工作方式RI由内部硬件置0这规律。编程时,要熟读书本的例题理解每一行的意义再自己试着按实验要求编程,不断修改。实验十一液晶显示实验1使用显两行字符第一行显示hello+己的英文名字”,二行显示正确的年月日实验代码与结果:#include<reg52.h>#defineucharunsignedchar专业.专注

.......#defineuintunsignedintucharcodetable1[]="helloluoweiwei";ucharcodetable2[]="20131210";ucharcodetable3[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//年

LCD16025*8点阵(可以数一数)。但是5*8不能提取代码少只能8*8,所以我们这里只用后前5列,前3列不用0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11,//月0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00日};sbiten=P2^7;sbitwr=P3^6;sbitrd=P3^7;sbitale=P1^0;ucharnum;voiddelayms(uintz)//

其实我们使用1602显示中文汉字,就是利用其内部的自定义字节空,我们都知道LCD1602内部有一个字节的自定义CGRAM那么好,我们就是要利用自定义字节来达到显示汉字的效果{uintx,y;for(x=z;x>0;x--)专业.专注

.......for(y=110;y>0;y--);}voidwrite_com(uchar//写命令函数{ale=1;P0=0x00;ale=0;P0=com;delayms(5);wr=0;rd=0;delayms(5);wr=1;rd=1;}voidwrite_data(uchar{ale=1;P0=0x02;ale=0;P0=date;delayms(5);专业.专注

//写数据函数.......rd=0;wr=0;delayms(5);rd=1;wr=1;}voidinit(){en=0;wr=1;rd=1;write_com(0x38);//设置16*2显示,5*7点阵8位数据接口write_com(0x0c);//设置开显示。不显示光标write_com(0x06);//写一个字符后,地址指针自动加1write_com(0x01);//显示清0,数据指针清0write_com(0x40);//开始写入你要显示的自定义字符、汉字代当我们需要想CGRAM写入数据时我们需要先写入CGRAM地址,从手册上可知,的地址0x40.所以当我们要写入数据时要先写入一条地址命令write_com(0x040)}voidmain()专业.专注

.......{init();write_com(0x80);for(num=0;num<16;num++){write_data(table1[num]);delayms(5);}write_com(0x80+0x43);for(num=0;num<4;num++){write_data(table2[num]);delayms(5);}write_com(0x40);//开始写入你要显示的自定义字符、汉字代当我们需要想CGRAM写入数据时我们需要先写入CGRAM地址,从手册上可知,的地址0x40.所以当我们要写入数据时要先写入一条地址命令write_com(0x040)for(num=0;num<24;num++){专业.专注

.......write_data(table3[num]);delayms(5);}write_com(0x80+0x47);write_data(0);write_com(0x80+0x48);for(num=5;num<7;num++){write_data(table2[num]);delayms(5);}write_com(0x80+0x4a);write_data(1);write_com(0x80+0x4b);for(num=8;num<10;num++){write_data(table2[num]);delayms(5);}write_com(0x80+0x4d);write_data(2);专业.专注

.......while(1);}2、选作题计一款带农历万年历实验代码与结果#include<REG51.H>#include<intrins.h>#include"bianliang.h"#include"lcd1602.h"#include"ds18b20.h"#include"ds1302.h"#defineuintunsignedint#defineucharunsigneduchar专业.专注

......./*************************************************************

函数名称:HEX2BCD(uinthex_data)*

能:HEX转为BCD子程序**

入口参数:hex_data出口参数:bcd_data************************************************************//**************晶显示程序*****************/voidshow_time(uintx,uinty)//示时间子函数{DS1302_GetTime(&CurrentTime);//取时钟芯片的时间数据TimeToStr(&CurrentTime);//间数据转换液晶字符GotoXY(x,y);Print(CurrentTime.TimeString);显示时间Delay1ms(50);//扫描延时}voidshow_time_set(uinty)//示设置时间子函数{DS1302_GetTime(&CurrentTime);//取时钟芯片的时间数据TimeToStr(&CurrentTime);//间数据转换液晶字符GotoXY(x,y);Print(CurrentTime.TimeString);显示时间专业.专注

.......Delay1ms(400);//扫描延时}voidshow_date(uintx,uinty)显示日期子函数{DS1302_GetTime(&CurrentTime);//取时钟芯片的时间数据DateToStr(&CurrentTime);//期数据转换液晶字符GotoXY(x,y);Print(CurrentTime.DateString);显示日期Delay1ms(50);//扫描延时}voidshow_date_set(uintx,uinty)//显示设置日期子函数{DS1302_GetTime(&CurrentTime);//取时钟芯片的时间数据DateToStr(&CurrentTime);//期数据转换液晶字符GotoXY(x,y);Print(CurrentTime.DateString);显示日期Delay1ms(200);//扫描延时}voidshow_temp(uintx,uinty)//显示温度子函数{ReadTemp();开启温度采集程序temp_to_str();//温度数据转换成液晶字符专业.专注

.......GotoXY(x,y);//液晶字符显示位置Print(TempBuffer);//显示温度Delay1ms(50);//扫描延时}voidshow_week(uintx,uinty){DS1302_GetTime(&CurrentTime);//取时钟芯片的时间数据DateToStr(&CurrentTime);//期数据转换液晶字符GotoXY(x,y);Print(week_value);//显星期GotoXY(x-4,y);Print("Week");//液晶上显示字母Delay1ms(50);//扫描延时}voidshow_week_set(unsignedx,unsignedint//显设置星期子函数{DS1302_GetTime(&CurrentTime);//取时钟芯片的时间数据DateToStr(&CurrentTime);//期数据转换液晶字符GotoXY(x,y);Print(week_value);//显星期GotoXY(x-4,y);专业.专注

.......Print("Week");//液晶上显示字母Delay1ms(200);//扫描延时}/**************晶显示程序结束*****************/bi(unsignedlong//叭{unsignedlongc;uintn;for(c=0;c<t;c++){延时BEEP=~BEEP;//反输出到喇叭的信号}}voidscankey(void)//主程序{unsignedintn;if(!Set)(100);//出按键音mdelay(8);专业.专注

.......while(!Set);//键松开count=count+1;//scankey按一次count就加done=1;

//入调整模式for(n=0;n<2000;n++);//去抖}}voidMenu_move(void)//主程序{unsignedintn;if(!Up)(100);//出按键音mdelay(8);while(!Up);//键松开count=count+1;

//scankey按次,count就加1if(count==4)count=1;for(n=0;n<2000;n++);//去抖}}voidmenu_OK(void)//主程序{专业.专注

.......unsignedintn;if(!Set)(100);//出按键音mdelay(8);while(!Set);//键松开set_menu=1;

//入调整模式for(n=0;n<2000;n++);//去抖}}/***************执按键响应*********************************/voidoutkey()//跳出调整模式返回默认显示{ucharSecond;if(Out==0){mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00);//写入允许专业.专注

.......Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80);//禁止写入done=0;LCD_clear();Delay1ms(50);bi(100);//下时发出按键音while(Out==0);}}voidtime_Upkey()//升序按键{Up=1;if(Up==0)(100);//下时发出按键音mdelay(8);switch(count){casetemp=Read1302(DS1302_SECOND);//读取秒数temp=temp+1;

//秒数加专业.专注

.......up_flag=1;数据调整后更新标志if((temp&0x7f)>0x59)超过59秒,清零temp=0;break;case2:temp=Read1302(DS1302_MINUTE);//读取分数temp=temp+1;up_flag=1;if(temp>0x59)分,清零temp=0;break;case3:

//分数加超过59temp=Read1302(DS1302_HOUR);//读取小时数temp=temp+1;up_flag=1;if(temp>0x23)

//小时数加超过23小时,清专业.专注

.......零temp=0;break;default:break;}while(Up==0);}}voiddate_Upkey(){Up=1;if(Up==0)(100);//下时发出按键音mdelay(8);switch(count){casetemp=Read1302(DS1302_WEEK);//读取星期数temp=temp+1;

//星期数加专业.专注

.......up_flag=1;if(temp>0x7)temp=1;break;case2:temp=Read1302(DS1302_DAY);//取日数temp=temp+1;//日数加1up_flag=1;if(temp>0x31)temp=1;break;case3:temp=Read1302(DS1302_MONTH);//读取月数temp=temp+1;//月数加1up_flag=1;if(temp>0x12)temp=1;break;case4:专业.专注

.......temp=Read1302(DS1302_YEAR);//读取年数temp=temp+1;//年数加1up_flag=1;if(temp>0x85)temp=0;break;default:break;}while(Up==0);}}voidshow_menu(){while(done==1){Menu_move();switch(count){case1:do{

//扫描模式切换按键专业.专注

.......GotoXY(0,0);Print("1,date");//显示日期设置菜单outkey();//描跳出按钮menu_OK();if(set_menu==1){set_menu=0;count=1;set_date();}}while(count==2);break;case2:do{GotoXY(0,0);Print("2,time");//示时间设置菜单outkey();//描跳出按钮menu_OK();if(set_menu==1){set_menu=0;count=1;time_set();专业.专注

.......}}while(count==3);break;case3:do{GotoXY(0,0);Print("3,SetAlarm");显示时间设置菜单outkey();//描跳出按钮menu_OK();}while(count==4);break;case4:done=0;count=0;LCD_clear();break;default:done=0;count=0;LCD_clear();break;}}}voidtime_set()//按键功能执行{while(done==1){if(flag==0)//关闭时钟停止计时{Write1302(0x8e,0x00);入允许专业.专注

.......temp=Read1302(0x80);Write1302(0x80,temp|0x80);Write1302(0x8e,0x80);//止写入flag=1;}scankey();switch(count){case1:do{outkey();

//扫描模式切换按键//count=1,整秒//描跳出按钮time_Upkey();//扫加按钮if(up_flag==1||down_flag==1)数据更,重新写入新的数据{Write1302(0x8e,0x00);//入允许Write1302(0x80,temp|0x80);写入新的秒数Write1302(0x8e,0x80);//止写入up_flag=0;down_flag=0;}专业.专注

hide_sec++;//闪计数.......if(hide_sec>3)hide_sec=0;if(done==1)show_time_set(0,1);//晶显示数据}while(count==2);break;case2:do{hide_sec=0;outkey();time_Upkey();if(temp>0x60)temp=0;

//count=2,整分专业.专注

if(up_flag==1||down_flag==1){Write1302(0x8e,0x00);//入允许Write1302(0x82,temp);//写入新的分数Write1302(0x8e,0x80);//止写入up_flag=0;down_flag=0;}hide_min++;if(hide_min>3).......hide_min=0;if(done==1)show_time_set(0,1);}while(count==3);break;ca

温馨提示

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

评论

0/150

提交评论