C51シングルチップ総合シミュレーション実験1 簡易信号機システム

目的:

アウトプット、 ディレイ LED 、デジタルチューブ の使い方をマスターしましょう。

実験装置とソフトウェア:

コンピューター; Keil Proteus 、MCU Elf。

実験内容:

信号機は人々の生活に欠かすことのできない重要なものであり、大きな意味を持っています。シングルチップマイコンを使い始めてからわずか数日で、ほとんどの
シンプルな制御技術により、シンプルな信号機の設計も可能です。

実験要件:

1. LEDは 東西南北に 赤・黄・緑の 3個ずつあります
2. 最初に赤色のライト が 10 秒間 、次に緑色のライト が 7 秒間 、最後に黄色のライトが 3 秒間点滅します
3. BCDデジタル チューブ を介して、 20 秒の全サイクルのカウントダウンが表示されます
4.ソフトウェア 遅延 によってのみ遅延でき 、ハードウェアタイマーは使用できません。

関連情報:

1. Keil Proteus の使い方。
2. マイクロコントローラーの出力。
3. LED 制御。
4. ニキシー管制御。
5. 遅延ソフトウェア遅延。

予備知識:

1. Keil Proteus の使い方。
2. C 言語、マイコンピン出力、 遅延 ソフトウェア遅延。

実験手順:

1. Proteusの回路図 を描き 51 個のシングルチップ マイコン、LED 、デジタル チューブを追加します。
2.新しい Keilプロジェクトを 作成し 、プログラムを作成し、Hexを生成し、信号機を制御します。
3. Hex を 回路にロードして実行します。

 コード表示:

#include <reg51.h>
#include <stdio.h>

sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;

sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;

char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(int ms)		//ÑÓʱ³ÌÐò
{
	int j,k;
	for(j=0;j<ms;j++)			//ÑÓʱms
	   for(k=0;k<124;k++);		//´óÔ¼1ºÁÃëµÄÑÓʱ
}

void display(int num) {
    P3 = led_mod[num / 10];  // ʮλÊý
    P1 = led_mod[num % 10];  // ¸öλÊý
}


void main(void)
 { 
		int seconds = 20;
    int p,k;
    led1=0;led2=0;led3=0;
	 
		P1=led_mod[7];
		P3=led_mod[7];
	 
		led1=1;led2=1;led3=1;
		led4=1;led5=1;led6=1;//³õʼ»¯	 
	 
   while (1)
	 {
		 seconds = 20;
		 
			for(p=20;p>10;p--)
		 { 
		  led1=1;led2=1;led3=0;
			led4=0;led5=1;led6=1;	//ºìÁÁ
			display(seconds);
			seconds--;
		  delay(1000);
		 }

		 
			for(k=0;k<3;k++)//»ÆÉÁ
		 {
		  led1=1;led2=0;led3=1;
			led4=1;led5=0;led6=1;
			delay(500);
		 
		  led1=1;led2=1;led3=1;
			led4=1;led5=1;led6=1;
			seconds--;	
			display(seconds);
			delay(500);			 
		 }
		 
		 for(p=7;p>1;p--)
		 {
		 	led1=0;led2=1;led3=1;
			led4=1;led5=1;led6=0;//ÂÌÁÁ
		  seconds--;	
			display(seconds);
			delay(1000);			 
		 }
		 
		 
//ÓÒ±ßÒ»ÅŵÆ
			seconds = 20;
		 
			led1=1;led2=1;led3=1;
			led4=1;led5=1;led6=1;//³õʼ»¯
		 
		 
		 
			for(p=20;p>10;p--)
		 { 
		  led1=0;led2=1;led3=1;
			led4=1;led5=1;led6=0;	//ºìÁÁ
			display(seconds);
			seconds--;
		  delay(1000);
		 }
		 
			for(k=0;k<3;k++)//»ÆÉÁ
			 {
				led1=1;led2=0;led3=1;
				led4=1;led5=0;led6=1;
				delay(500);
			 
				led1=1;led2=1;led3=1;
				led4=1;led5=1;led6=1;
				seconds--;	
				display(seconds);				 
				delay(500);		
			 }
		 
		 for(p=7;p>1;p--)
		 {
		 	led1=1;led2=1;led3=0;
			led4=0;led5=1;led6=1;//ÂÌÁÁ
		  seconds--;	
			display(seconds);
			delay(1000);			 
		 }
		 
		 
	 }
 }

おすすめ

転載: blog.csdn.net/WZY22502701/article/details/131008311