• 方案介紹
    • 1.? 簡(jiǎn)介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的7人表決器設(shè)計(jì)

04/28 08:51
203
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):【X04】

1.? 簡(jiǎn)介

? 本文提出了一種基于51單片機(jī)的7人表決器設(shè)計(jì)。本系統(tǒng)由AT89C51單片機(jī)為控制核心,要求其具有指示表決開始、指示表決結(jié)束、顯示表決人數(shù)、顯示表決結(jié)果、顯示表決倒計(jì)時(shí)時(shí)間、結(jié)束指示等功能。

2.? 主要功能

a.支持數(shù)碼管顯示表決結(jié)果,表決通過顯示“1”,不通過顯示“0”。

b.支持按鍵實(shí)現(xiàn)開始、暫停、復(fù)位等操作。

c.在主持人控制下,10秒內(nèi)表決有效。

d.支持表決的人,對(duì)應(yīng)的LED燈發(fā)光。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。

sbit smg1=P2^4;		//定義數(shù)碼管第一位
sbit smg2=P2^6;		//定義數(shù)碼管第二位
sbit smg3=P2^7;		//定義數(shù)碼管第三位
sbit smg4=P2^5;		//定義數(shù)碼管第四位

sbit keyks=P2^2;	//定義開始按鍵
sbit keyqc=P2^0;	//定義復(fù)位按鍵

sbit key1=P1^0;		//定義1號(hào)表決人	 
sbit key2=P1^1;		//定義2號(hào)表決人
sbit key3=P1^2;		//定義3號(hào)表決人
sbit key4=P1^3;		//定義4號(hào)表決人
sbit key5=P1^4;		//定義5號(hào)表決人
sbit key6=P1^5;		//定義6號(hào)表決人
sbit key7=P1^6;		//定義7號(hào)表決人

sbit l1=P3^0;		//定義第1燈
sbit l2=P3^1;		//定義第2燈
sbit l3=P3^2;		//定義第3燈
sbit l4=P3^3;		//定義第4燈
sbit l5=P3^4;		//定義第5燈
sbit l6=P3^5;		//定義第6燈
sbit l7=P3^6;		//定義第7燈

sbit zt=P2^1;   //定義暫停
sbit spk=P1^7;		//定義蜂鳴器

int djs,js=0;    	//djs和bt是初始倒計(jì)時(shí)時(shí)間	
//flag1~7用來保證在未開始表決之前誤按   flagD用來控制是否顯示倒計(jì)時(shí)  bjs表決計(jì)數(shù)
int flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0,flagD=0,bjs=0;	 
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80,0x9b};
      //   0    1   2    3    4    5    6     7    8     9      E 
void delayms(unsigned z)	 
{
	unsigned x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);   
}

void Timer0_init()			//定時(shí)器0初始化
{
    js=0;
	TMOD=0x01;				//設(shè)置定時(shí)器0為工作方式1(M1M0為01)
	TH0=(65536-45872)/256;	//裝初值11.0592M晶振定時(shí)50ms數(shù)為45872
	TL0=(65536-45872)%256;		
	ET0=1;						//開定時(shí)器0中斷
	EA=1;						//開總中斷
}

void timer0() interrupt 1 using 1	//定時(shí)器0中斷服務(wù)函數(shù)
{
	TH0=(65536-45872)/256;		//裝初值11.0592M晶振定時(shí)50ms數(shù)為45872
	TL0=(65536-45872)%256;	
	js++;						//疊加20次
	if(js==20) 
	{ 
	  js=0;						//清空
	  djs--;					//產(chǎn)生1s的倒計(jì)時(shí)
	 }
}

void djsxs()   //顯示倒計(jì)時(shí)函數(shù)
{	
	int b1,b2;
	b1=djs/10;
	b2=djs%10;				  //將倒計(jì)時(shí)時(shí)間分成高低位
	P0=table[b1];			  
	smg2=0;
	delayms(3);
	smg2=1;					 //顯示十位數(shù)字
	
	P0=table[b2];
	smg3=0;
	delayms(3);				 //顯示個(gè)位數(shù)字
	smg3=1;
}
void djsxs10() //第一位數(shù)碼管顯示 0
{
 	P0=0x5f;			//第一位數(shù)碼管顯示0
    smg1=0;
    delayms(3);
    smg1=1;
}
void djsxs11() //第一位數(shù)碼管顯示1
{
 	P0=0x44;			//第一位數(shù)碼管顯示1
    smg1=0;
    delayms(3);
    smg1=1;
}
void djsxs20() //第二位數(shù)碼管顯示 -
{
	P0=0x80;			//第二位數(shù)碼管顯示-
	smg4=0;
	delayms(3);			   
	smg4=1;
}
void djsxs30() //第三位數(shù)碼管顯示 -
{
	P0=0x80;			//第三位數(shù)碼管顯示-
	smg2=0;
	delayms(3);			   
	smg2=1;
}
void djsxs0()  //第四位數(shù)碼管顯示0
{
	P0=table[0];
    smg3=0;
    delayms(3);
    smg3=1;		 //第四位數(shù)碼管顯示0

}
void djsxs1()  //第四位數(shù)碼管顯示1
{
	P0=table[1];	    //第四位數(shù)碼管顯示1
    smg3=0;
    delayms(3);
    smg3=1;				  

}
void djsxs2()  //第四位數(shù)碼管顯示2
{
	P0=table[2];
    smg3=0;
    delayms(3);
    smg3=1;				//第四位數(shù)碼管顯示2

}
void djsxs3()  //第四位數(shù)碼管顯示3
{
	P0=table[3];
    smg3=0;
    delayms(3);
    smg3=1;			  //第四位數(shù)碼管顯示3

}
void djsxs4()  //第四位數(shù)碼管顯示4
{
	P0=table[4];
    smg3=0;
    delayms(3);
    smg3=1;			 //第四位數(shù)碼管顯示4

}
void djsxs5()  //第四位數(shù)碼管顯示5
{
	P0=table[5];
    smg3=0;
    delayms(3);
    smg3=1;		   //第四位數(shù)碼管顯示5

}
void djsxs6()  //第四位數(shù)碼管顯示6
{
	P0=table[6];
    smg3=0;
    delayms(3);
    smg3=1;			//第四位數(shù)碼管顯示6

}
void djsxs7()  //第四位數(shù)碼管顯示7
{
	P0=table[7];
    smg3=0;
    delayms(3);
    smg3=1;		  //第四位數(shù)碼管顯示7
}

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

表決通過:

表決失?。?/strong>

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻等。

7.? 資料獲取鏈接

百度網(wǎng)盤下載鏈接:【X04】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦