单片机实验.docx

上传人:b****6 文档编号:7199746 上传时间:2023-01-21 格式:DOCX 页数:3 大小:16.48KB
下载 相关 举报
单片机实验.docx_第1页
第1页 / 共3页
单片机实验.docx_第2页
第2页 / 共3页
单片机实验.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机实验.docx

《单片机实验.docx》由会员分享,可在线阅读,更多相关《单片机实验.docx(3页珍藏版)》请在冰豆网上搜索。

单片机实验.docx

单片机实验

单片机实验

      实验一  如图1-1所示,利用AT89C51单片机的P1口外接8个发光二极管,实现流水灯效果。

    图1-1实验一仿真电路图  #includeunsignedcharLEDTAB={  0xFE,0xFD,0xFB,0xF7,,0xEF,0xDF,0xBF,0x7F};  voidDelay(void){  unsignedchari,j,k;for(i=10;i>0;i--)  for(j=100;j>0;j--)  for(k=200;k>0;k--);}  voidmain(void){  unsignedchari;while

(1)  {  for(i=0;i  P1=LEDTAB[i];  Delay();  }      }}  实验二  1、如图2-1所示,利用AT89C51单片机的P2端口外接一位共阴LED数码管,实现在  LED数码管上轮流显示0~9。

    图2-1数码管显示实验内容1仿真电路图  #include    unsignedcharSEGTAB={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};voidDelay(void){unsignedchari,j,k;for(i=10;i>0;i--)  for(j=100;j>0;j--)  for(k=200;k>0;k--);}voidmain(void){  unsignedchari;  while

(1)  {  for(i=0;i    Delay();}}  }  2、如图2-2所示,利用AT89C51单片机的P2和P0端口分别驱动2位共阴LED数码管  的笔段和位选段,利用动态显示原理实现LED数码管上显示00~99的自动计数加1数值。

    图2-2数码管显示实验内容2仿真电路图  #includeunsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsignedcharDIGTAB={  0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};unsignedcharLEDBuffer[2];unsignedcharLEDPointer;voidDelay(void){  unsignedchari,j;  for(i=10;i>0;i--)  for(j=100;j>0;j--);}voidmain(void){unsignedcharCnt=0;unsignedcharmsCnt=0;      while

(1){  P2=SEGTAB[LEDBuffer[LEDPointer]];  P0=DIGTAB[LEDPointer];  if(++LEDPointer==sizeof(LEDBuffer))LEDPointer=0;  Delay();  if(++msCnt==200){  msCnt=0;  if(++Cnt==100)Cnt=0;  LEDBuffer[0]=Cnt_;  LEDBuffer[1]=Cnt/10;}}}  实验三  如图3-1所示,利用AT89C51单片机的P3口外接一个4X4矩阵键盘,矩阵键盘的4根行线分别连接在~引脚上,4根列线分别连接在~引脚上。

AT89C51单片机的P2驱动一个8位共阴LED数码管,实现在矩阵键盘的16个按键识别,并将对应的按键编号显示在LED数码管上。

    图3-1  矩阵键盘实验内容1仿真原理图  #include  unsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,};  unsignedcharKEYTAB={  0xEE,0xED,0xEB,0xE7,0xDE,0xDD,0xDB,0xD7,0xBE,0xBD,0xBB,0xB7,0x7E,0x7D,0x7B,0x77,};    voidDelay10mS(void){  unsignedchari,j;for(i=10;i>0;i--)  for(j=100;j>0;j--);}  voidmain(void){  unsignedcharKeyValue;unsignedchari,temp;while

(1){  P3=0xF0;  if(0xF0!

=(P3&0xF0))  {  Delay10mS();  if(0xF0!

=(P3&0xF0))  {  temp=P3&0xF0;  P3=0x0F;  temp|=(P3&0x0F);  for(i=0;i  实验四  1、如图4-1所示,利用AT89C51单片机的引脚外接一个轻触按钮“BUTTON”,用  中断方式实现按键计数加1,并通过P2和P0端口驱动的两个共阴LED数码管显示00~99的计数值。

其中P2端口驱动显示数字的十位数,P0端口驱动显示数字的个位数。

  

        图4-1  #include  unsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,};  unsignedcharKeyCnt=0;voidmain(void){  P2=SEGTAB[KeyCnt/10];P0=SEGTAB[KeyCnt_];  IT0=1;EX0=1;EA=1;  while

(1){  ;}}  voidINT0_ISR(void)interrupt0{  if(0==P3_2)  {  实验内容1仿真电路图  if(++KeyCnt==100)KeyCnt=0;  P2=SEGTAB[KeyCnt/10];  P0=SEGTAB[KeyCnt_];}}  2、如图4-2所示,利用AT89C51单片机的P1端口外接8个LED发光二极管,实现流  水灯,流水灯的速度为~1秒之间可调,步进为,外接在和引脚上的两个轻触开关实现调慢和调快功能,速度的档位通过P2端口外接的一个8位共阴LED数码管显示。

    #include  unsignedcharLEDTAB={  0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,};  unsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0X6D,0x7D,0x07,0x7F,0x6F,};  voidDelay10mS(unsignedchart){  unsignedchari,j;  do  {  for(i=100;i>0;i--)  for(j=100;j>0;j--);  }  while(--t);}  unsignedcharSpeed=20;voidmain(void){  unsignedchari;  P2=SEGTAB[Speed/20];IT0=1;EX0=1;IT1=1;EX1=1;EA=1;  while

(1){  for(i=0;i  voidINT0_ISR(void)interrupt0{  if(0==P3_2){  Speed+=20;if(Speed>100)Speed=100;P2=SEGTAB[Speed/20];}}  voidINT1_ISR(void)interrupt2{  if(0==P3_3){  Speed-=20;if(Speed  实验五  1、如图5-1所示,利用AT89C51单片机的定时器T0产生1KHz的方波信号引脚  输出,通过连接到“OSCILLOSCOPE”虚拟示波器上查看显示的波形图。

      #includevoidmain(void){  TMOD|=0x01;  TH0=(65536-500)/256;TL0=(65536-500)%6;TR0=1;  while

(1)  {  if(1==TF0){  TF0=0;  TH0=(65536-500)/256;  TL0=(65536-500)%6;  P3_7=~P3_7;}}}  2、如图5-2所示,利用AT89C51单片机的定时器T0产生1ms的动态数码管显示扫描  时间,驱动接在P2和P0端口上的4位共阴LED数码管,其中P2用于驱动共阴LED数码管的笔段A~H,P0用于驱动共阴LED数码管的位选端;采用定时器T0的溢出中断实现1ms定时。

数码上显示自己的班号和学号的后2位数字,显示方式为“X-YY”,X为班号,YY为学号。

并且显示的“-”闪烁频率为秒。

    #include  unsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};  unsignedcharDIGTAB={  0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,};  unsignedcharLEDBuffer[2];unsignedcharLEDPointer;voidDelay(void){  unsignedchari,j;  for(i=10;i>0;i--)  for(j=100;j>0;j--);}  voidINT0_ISR(void)interrupt0{  if(0==P3_2)  {  P2=SEGTAB[LEDBuffer[LEDPointer]];  P0=DIGTAB[LEDPointer];}  }  voidmain(void){unsignedcharCnt=99;unsignedcharmsCnt=0;

  

      LEDBuffer[0]=Cnt_;LEDBuffer[1]=Cnt/10;IT0=1;  EX0=1;  EA=1;while

(1){  P2=SEGTAB[LEDBuffer[LEDPointer]];  P0=DIGTAB[LEDPointer];  if(++LEDPointer==sizeof(LEDBuffer))LEDPointer=0;  Delay();  if(++msCnt==200)  {  msCnt=0;  if(--Cnt==(-1))Cnt=99;  LEDBuffer[0]=Cnt_;  LEDBuffer[1]=Cnt/10;  }}}实验六  1、实验内容1  如图6-1,利用AT89C51单片机的和外接一个74HC164驱动1个8位共阴LED数码管,实现0~9的轮流显示,    #include  unsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,  };  voidDelay(void){  unsignedchari,j,k;for(i=10;i>0;i--)  for(j=100;j>0;j--)  for(k=100;k>0;k--);}  voidmain(void){  unsignedchari;SCON=0x00;while

(1)  {  for(i=0;i  2、实验内容2  如图6-2,在U1和U2的P1端口分别接一个8位共阴LED数码管,引脚上分别接有一个轻触开关。

U1的连接到U2的,U1的连接到U2的,通过串行口进行双机通信,实现在U1上按下按键实现计数加1,通过U2的LED数码管显示,同样U2上按下按键实现计数加1,通过U1的LED数码管显示,双机通信的波特率为9600。

    #include  unsignedcharSEGTAB={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};  voidmain(void){  unsignedcharKeyCnt=0;  PCON|=0x80;SCON=0x50;TH1=0xFD;TL1=0xFD;TR1=1;ES=1;EA=1;  while

(1)  {  if(0==P3_2)  {  if(++KeyCnt==10)KeyCnt=0;  SBUF=KeyCnt;  while(0==TI);  TI=0;  while(0==P3_2);  }  }}  voidSerial_ISR(void)interrupt4{  unsignedchartemp;  if(1==RI)  {  RI=0;  temp=SBUF;  P1=SEGTAB[temp];  }}

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1