Loading [MathJax]/extensions/tex2jax.js

微机原理实验一、二

看这里 单片及原理图

实验一:I/O口的简单运用

  • 题目

    LED流水灯B (花样沉积) :由左往右,第一次1个流水灯,走到最右侧停止不动;然后再从最左边一个流水灯,到最右侧倒数第二个灯位停止;依次执行,直到全部灯亮;然后全部灯熄灭,重新执行上述效果;

#include<reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit LED=P0^0;
char step=7;
unsigned char last=0x00;
unsigned char temp=0x80;
unsigned char now =0x00;
void delay(unsigned int t){
    while(t--);
}
void init(){
    P0=0x00;
    last=0x00;
    step=7;
}
void config(int i)
{
    now = temp>>i;
    now|=last;

    if (i==step){
    last|=now;
    }
}
void show(){
    P0=~now;
    delay(30000);
}
void main(){
    ENLED=0;
    ADDR2=1;
    ADDR1=1;
    ADDR0=0;

    while(1){
        int i;
        for(i=0;i<=step;i++){
            config(i);
            show();    
        }
        step--;
        if(step<0){
            init();
            show();
        }    
    }

}
  • 演示视频如下:

实验二:定时/计数器与中断的综合使用

  • 题目

    定时器产生1Hz (1s周期)的方波,驱动LED闪烁;同时按键接外部中断端口,按下后LED闪烁频率变为5Hz; 5秒后,恢复之前的闪烁频率(1Hz) ;

#include <reg52.h>
bit clicked=0;
unsigned int cnt=0;
sbit P0_0 = P0^0;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
void Timer0Init()       //50毫秒@11.0592MHz
{
    TMOD &= 0xF0;       //设置定时器模式
    TMOD |= 0x01;       //设置定时器模式
    TL0 = 0x00;     //设置定时初始值
    TH0 = 0x4C;     //设置定时初始值
    TF0 = 0;           //清除TF0标志
    ET0=1;      
    TR0 = 1;        //定时器0开始计时
}

void INT0Init()
{   
    EX0=1;
    IT0=1;
}
void main(){
    ENLED=0;
    ADDR3=1;
    ADDR2=1;
    ADDR1=1;
    ADDR0=0;  //配置LED
    P2=0XF7;  //将矩阵按键作为独立按键使用
    EA=1;
    Timer0Init();
    INT0Init();
    P0_0=0;
    while(1);

}

void InterruptINT0() interrupt 0
{
        clicked = 1;
}
void InterruptT0() interrupt 1
{
    static unsigned int cnt5s=0;
    TL0 = 0x00;     //设置定时初始值
    TH0 = 0x4C;     //设置定时初始值
    cnt++;
    if (!clicked){
            if(cnt>10){
            P0_0= !P0_0;
            cnt=0;
            }
    }else{
        if(cnt>2){
            P0_0=!P0_0;
            cnt=0;
        }
        cnt5s++;
        if(cnt5s>100){
                clicked = 0;
                cnt5s=0;
        }
    }
}
  • 演示视频如下:

评论区 0