マイクロコントローラー実験3:外部割り込み制御デジタルチューブサイクル表示0〜9

説明

以下の機能を実現するために、シングルチップマイクロコンピュータのプロテウスシミュレーション回路を設計します。

  1. P0ポートデジタルチューブを制御して、ディスプレイ0〜9を循環させます
  2. 上部のスイッチを押してP2ポートデジタルチューブを制御し、0〜9を順番に表示します
  3. 下のスイッチを押して、P1ポートデジタルチューブを制御し、0〜9を順番に表示します

実験回路図

ここに写真の説明を挿入

実験分析

  1. P0ポートデジタルチューブを制御して、ディスプレイ0〜9を循環させます。P0がDSY_CODEの値を継続的に取得し、各変更の前に遅延するようにします。
  2. 外部割り込みINT0が発生したら、P2ポートデジタルチューブを制御して0〜9を順番に表示します。外部割り込み0をオンにしてから、P2がループせずに割り込み処理関数のDSY_CODEの値を取得し続けるようにします。
  3. 外部割り込みINT1が発生した場合は、P1ポートデジタルチューブを制御して0〜9を順番に表示します。外部割り込み1を有効にすると同時に、優先度を高く設定します。割り込み処理機能は上記と同じです。

ソースコード

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]={
    
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; 

//延时函数
void delay(uint m, uint n) {
    
    
	uint i, j;
	for(i = 0; i < m; i++) {
    
    
		for(j = 0; j < n; j++);
	}
}

void open_interrupt() {
    
    
	EA = 1;   //CPU开中断
	EX0 = 1;  //允许外部中断0产生中断
	IT0 = 1;  //外中断0为边沿触发方式
	EX1 = 1;  //允许外部中断1产生中断
	IT1 = 1;  //外中断1为边沿触发方式
	PX1 = 1;  //外中断1为高级中断
}

//外部中断0
void inter0() interrupt 0 {
    
    
	uint i = 0;
	for(i = 0; i < 10; i++) {
    
    
		P2 = DSY_CODE[i];
		delay(880, 110);
	}
}

//外部中断1
void inter1() interrupt 2 {
    
    
	uint i = 0;
	for(i = 0; i < 10; i++) {
    
    
		P1 = DSY_CODE[i];
		delay(880, 110);
	}
}

void main() {
    
    
	uint i = 0;
	open_interrupt();  //开中断
	while(1) {
    
    
		P0 = DSY_CODE[i];
		i = (i + 1) % 10;
		delay(880, 110);
	}
}

おすすめ

転載: blog.csdn.net/Cyril_KI/article/details/110583731