仿真版本: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ì)合集