久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6641|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的投票表決器制作~~

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:167955 發(fā)表于 2017-3-4 19:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1、前言
    在社會(huì)高速發(fā)展的當(dāng)下,各方各面效率的提升得到了人們的重視,投票表決環(huán)節(jié)也不例外。按照傳統(tǒng)的用紙條投票,會(huì)耽誤大量的時(shí)間,其中就包括制作紙條的時(shí)間,分發(fā)和回收紙條的時(shí)間。也許大家說手機(jī)網(wǎng)絡(luò)投票,網(wǎng)絡(luò)手機(jī)投票往往要要打開網(wǎng)頁,但前提是網(wǎng)速要好。在這種情況下,如果在座位旁安裝一個(gè)投票按鈕,隨手可按,輕松、隨意。這樣子既可以節(jié)省大量的時(shí)間和精力,同時(shí)也可以排除網(wǎng)絡(luò)不穩(wěn)定而導(dǎo)致無法網(wǎng)絡(luò)投票的問題。這樣的一個(gè)投票系統(tǒng),具有巨大的意義,充分節(jié)省時(shí)間和精力,有很大的便捷性,同時(shí)發(fā)揮了公平的原則,讓人人都可以表達(dá)出自己的意愿,有效調(diào)動(dòng)了大家的積極性,提高大家對(duì)投票結(jié)果的認(rèn)可度,減少了沖突的發(fā)生,并且實(shí)時(shí)傳遞出投票訊息,在一些比賽娛樂節(jié)目中具有很高的實(shí)用價(jià)值。
2、使用及應(yīng)用說明
2.1、投票表決器的使用
根據(jù)使用方便原則,本投票表決器采用充電寶供電。將充電寶輸出端接于本投票表決器的USB接口上(由于買的USB接口比較廉價(jià),需要按緊外皮后再插入到充電寶中),此時(shí)顯示屏亮起,顯示屏左邊數(shù)字表示反對(duì)票數(shù)目,對(duì)應(yīng)于五對(duì)按鍵中的左方按鍵(×),顯示屏右邊數(shù)字表示贊成票數(shù)目,對(duì)應(yīng)于五對(duì)按鍵中的右方按鍵(√)。通電以后,依次輸入贊成或者反對(duì)(即按下每一對(duì)按鍵左邊或者右邊的按鍵),然后按下藍(lán)色的確定按鍵,此時(shí)芯片判斷輸入的贊成反對(duì)票數(shù),當(dāng)贊成票數(shù)大于反對(duì)票數(shù)時(shí),流水燈開始亮起顯示效果,贊成與反對(duì)票數(shù)相同時(shí),黃燈亮起,反對(duì)票數(shù)大于贊成票數(shù)時(shí),紅燈亮起,整個(gè)投票過程中顯示屏都實(shí)時(shí)顯示贊成和反對(duì)的票數(shù)。
     若要進(jìn)行下一次判斷或者需要重置票數(shù),則按下左下方黃色按鈕,重置票數(shù),此時(shí)顯示屏顯示0.0 ,以后即可進(jìn)行下一次投票。
2.2、應(yīng)用
    當(dāng)需要進(jìn)行投票時(shí),接通充電寶電源,


即可按照以上方法依次進(jìn)行投票。


3、原理

file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image002.jpg

本投票表決器是基于兩塊51單片機(jī)來制作的,右邊一塊的下方引腳用來讀取十二個(gè)獨(dú)立按鍵的電平值并進(jìn)行分析,當(dāng)單片機(jī)統(tǒng)計(jì)到贊成票數(shù)和反對(duì)票數(shù)的總數(shù)時(shí),實(shí)時(shí)地給上端p口分配相應(yīng)電平值以點(diǎn)亮數(shù)碼管相應(yīng)段位(其中數(shù)碼管與單片機(jī)p口中間用了三極管擴(kuò)流)。
file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image004.jpg
              三極管擴(kuò)流
file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image006.jpg
               獨(dú)立按鍵
同時(shí),單片機(jī)程序會(huì)對(duì)贊成票數(shù)和反對(duì)票數(shù)進(jìn)行分析,若反對(duì)票數(shù)大于贊成票數(shù)時(shí)給予紅色LED管以高電平,若持平給予黃色LED管以高電平,若贊成票大于反對(duì)票將投票通過的結(jié)果通過串口(右邊單片機(jī)上端的一個(gè)p口)傳送到左邊單片機(jī),左邊單片機(jī)執(zhí)行點(diǎn)亮綠色LED愛心陣列的程序。

file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image008.jpg
           愛心陣列

本投票表決器通過usb口用充電寶作為5V電源供電,為解決工作電流太小而導(dǎo)致充電寶自動(dòng)關(guān)閉的情況,我們?cè)陔娫淳兩端并聯(lián)了一個(gè)68歐姆的電阻,如下圖所示。
file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image010.jpg

file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image012.jpg
              USB線
file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image014.jpg
背面焊接圖

另外,我們?cè)谠O(shè)計(jì)電路的過程中,給兩塊單片機(jī)芯片都分別預(yù)留了兩個(gè)p口,可以隨時(shí)對(duì)程序進(jìn)行修改并燒錄進(jìn)芯片。

心形燈接線原理圖:
file:///C:/WINDOWS/TEMP/msohtmlclip1/01/clip_image016.jpg

附:
右邊單片機(jī)芯片源代碼為:
#include<reg51.h>
#include<intrins.h>

#defineAGREE_P    P1
#defineDISAGREE_P P2

    typedef unsigned char uchar;

    sbit RESET_P = P3^3;
    sbit RE_AGREE_P = P3^4;
    sbit RE_EQUAL_P = P3^5;
    sbit RE_DISAGREE_P = P3^6;
    sbit SHOW_RESULT_P = P3^2;

    bit TR0_5ms_FLAG = 0;

voidTimer0Init(void)       //5毫秒@11.0592MHz
{
    TMOD &= 0xF0;       //設(shè)置定時(shí)器模式
    TMOD |= 0x01;       //設(shè)置定時(shí)器模式
    TL0 = 0x00;     //設(shè)置定時(shí)初值
    TH0 = 0xEE;     //設(shè)置定時(shí)初值
    TF0 = 0;        //清除TF0標(biāo)志
    TR0 = 1;        //定時(shí)器0開始計(jì)時(shí)
}

ucharpops(uchar n){
    char cnt = 0;
    while(n){
        if(n&0x01)
            ++cnt;
        n >>= 1;
    }
    return cnt;
}

voidshow_result(uchar agree,uchar disagree,uchar init){
    if(init){
        RE_AGREE_P = 1;
        RE_EQUAL_P = 1;
        RE_DISAGREE_P = 1;
        return ;
    }
    if(agree > disagree){
        RE_AGREE_P = 0;
        RE_EQUAL_P = 1;
        RE_DISAGREE_P = 1;
    }
    else if(agree < disagree){
        RE_AGREE_P = 1;
        RE_EQUAL_P = 1;
        RE_DISAGREE_P = 0;
    }
    else {
        RE_AGREE_P = 1;
        RE_EQUAL_P = 0;
        RE_DISAGREE_P = 1;
    }
}

void main()
{
    uchar reset_p_last = 0;
    uchar agree_p_last = 0x00;
    uchar disagree_p_last = 0x00;
    uchar agree_last = 0x00,disagree_last =0x00;
    uchar agree,disagree;
    uchar show_result_last = 0;
    uchar show_on = 0;
    uchar t;

    show_result(0,0,1);
    Timer0Init();
    ET0 = 1;
    EA = 1;
    while(1){
        if(TR0_5ms_FLAG){
            TR0_5ms_FLAG = 0;
            agree = RESET_P;
            t = reset_p_last;
            reset_p_last = agree;
            if(!agree && t){
                agree_p_last = 0x00;
                disagree_p_last = 0x00;
                agree_last = 0x00;
                disagree_last = 0x00;
                show_result_last = 0;
                show_on = 0;
                show_result(0,0,1);
                continue;
             }
            agree = SHOW_RESULT_P;
            t = show_result_last;
            show_result_last = agree;
            if(!agree && t){
                show_on = 1;
             }
            agree = AGREE_P;
            disagree = DISAGREE_P;
            t = agree_p_last;
            agree_p_last = agree;
            agree = t & (~agree);
            t = disagree_p_last;
            disagree_p_last = disagree;
            disagree = t & (~disagree);
            agree_last |= agree;
            disagree_last |= disagree;
            if(show_on)
                show_result(pops(agree_last),pops(disagree_last),0);

        }
    }
}

void tr0() interrupt1{
    TL0 = 0x00;     //設(shè)置定時(shí)初值
    TH0 = 0xEE;     //設(shè)置定時(shí)初值
    TR0_5ms_FLAG = 1;
}


左邊單片機(jī)芯片源代碼為:
#include<reg51.h>

    voiduart_init(void);
    bitG_UART_RECVED;
    bitG_TR0_FLAG;
    unsignedchar g_uart_char = 0;
    intg_tr0_cnt = 0;

    void led_set(unsignedchar led_index,char on);
    voidled_off(void);

    sbit LED_13= P2^7;
    sbit LED_14= P0^7;

#define BLINK_IM_MAX   (4)
    codeunsigned char blink_tm_by_50ms[BLINK_IM_MAX] = {2,2,4,12};
    codeunsigned char blink_cnts[BLINK_IM_MAX] = {30,28,15,8};


#define LED_NUM (30)

void led_set(unsigned char led_index,char on){
    unsignedchar t;
    if(led_index< 7){
        t =0x01<<(6-led_index);
        if(on)
            P2&= ~t;
        else
            P2|= t;
    }
    else if(led_index< 13){
        t =0x01<<(14-led_index);
        if(on)
            P3&= ~t;
        else
            P3|= t;
    }
    elseif(led_index == 13){
        LED_13 =on ? 0 : 1;
    }
    elseif(led_index == 14){
        LED_14 =on ? 0 : 1;
    }
    elseif(led_index < 23){
        t =0x01<<(22-led_index);
        if(on)
            P1&= ~t;
        else
            P1|= t;
    }
    elseif(led_index < 30){
        t =0x01<<(led_index -23);
        if(on)
            P0&= ~t;
        else
            P0 |= t;
    }
    else {
        ;
    }
}

void led_off(void){
    P0 = 0xFF;
    P1 = 0xFF;
    P2 = 0xFF;
    P3 |= 0xFC;
}

void led_on(void){
    P0 = 0x00;
    P1 = 0x00;
    P2 = 0x00;
    P3 &=0x03;
}


void tr0_init(void){ // 50ms
    TMOD &=0xF0;   //設(shè)置定時(shí)器模式
    TMOD |=0x01;   //設(shè)置定時(shí)器模式
    TL0 =0x00;     //設(shè)置定時(shí)初值
    TH0 =0x4C;     //設(shè)置定時(shí)初值
    TF0 =0;        //清除TF0標(biāo)志
    TR0 =0;        //定時(shí)器0開始計(jì)時(shí)
    ET0 = 1;
    G_TR0_FLAG =0;
    g_tr0_cnt =0;
}

void uart_init(void){
    SCON = 0x50;   //UART為模式1,8位數(shù)據(jù),不允許接收
    TMOD |= 0x20; //定時(shí)器1為模式2,8位自動(dòng)重裝
    PCON |= 0x80; //SMOD=1;
    TH1 = 0xFD;   //Baud:19200fosc="11".0592MHz
    IE |= 0x90;     //Enable Serial Interrupt
    TR1 =1;       // timer 1 run
    TI=1;
    ES = 1;
}



void led_show(unsigned char blink_im,unsigned charblink_cnt){
   if(!blink_cnt)
       led_off();
   switch(blink_im){
        case 0 :if(blink_cnt)
                   led_set(blink_cnt-1,0);
                led_set(blink_cnt,1);break;
        case 1 : if(blink_cnt){
                   led_set(blink_cnt-1,0);
                   led_set(blink_cnt+2,1);
                  }
                 else {
                   led_set(0,1),led_set(1,1),led_set(2,1);
                 }
                  break;
        case 2 :led_set(blink_cnt,1),led_set(29-blink_cnt,1);break;
        case 3 :if(blink_cnt&0x01)
                   led_on();
                else
                   led_off();
                break;
        default: ;
    }
}

void main(){
    charled_blink = 0;
    unsignedchar blink_im_cnt = 0;
    unsignedchar blink_cnt = 0;
    tr0_init();
    uart_init();

   //G_UART_RECVED = 1;
   //g_uart_char = 'S';

    EA = 1;

while(1){
   if(G_UART_RECVED){
       G_UART_RECVED = 0;
       switch(g_uart_char){
         case'E' : led_blink = 0; led_off();TR0 = 0; break;
         case'S' : led_blink = 1; blink_im_cnt = 0;
                                   blink_cnt =0;
                                   g_tr0_cnt =0;
                                   G_TR0_FLAG = 0;
                                   TR0 = 1;
                                   break;
         default: ;
         }
    }
   if(G_TR0_FLAG){
       G_TR0_FLAG = 0;
       if(led_blink){
           led_show(blink_im_cnt,blink_cnt);
           if(++g_tr0_cnt == blink_tm_by_50ms[blink_im_cnt]){
               g_tr0_cnt = 0;
               if(++blink_cnt == blink_cnts[blink_im_cnt]){
                   blink_cnt = 0;
                   if(++blink_im_cnt == BLINK_IM_MAX){
                       G_UART_RECVED = 1;
                       g_uart_char = 'E';
                   }
               }
            }
        }
    }
}
}

void tr0_int() interrupt 1 {
    TL0 =0x00;     //設(shè)置定時(shí)初值
    TH0 =0x4C;     //設(shè)置定時(shí)初值
    G_TR0_FLAG =1;
}

void uart_int() interrupt 4 {
    if(TI){
        TI = 0;
    }
    else {
        RI = 0;
       g_uart_char = SBUF;
       G_UART_RECVED = 1;
    }
}




































分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲有码转帖 | 999www视频免费观看 | 欧美日韩精品在线免费观看 | 日韩国产精品一区二区三区 | 亚洲97| 波多野结衣电影一区 | 狠狠干av | 久久久国产精品一区 | 黄色一级视频免费 | 欧美三级成人理伦 | 一级大片免费 | 欧美日韩国产在线观看 | 亚洲欧美一区二区三区在线 | 国精品一区 | 51ⅴ精品国产91久久久久久 | 在线日韩 | www.国产精| 国产精品日韩 | 成人福利在线视频 | 亚洲精品成人 | 羞羞视频网页 | 国产精品免费一区二区三区四区 | 精品99爱视频在线观看 | 久久久久综合 | 国产精品久久av | 日韩在线欧美 | 一区二区三区国产在线观看 | 日韩精品国产精品 | 午夜合集 | 一级a毛片| 久久99精品久久久久久国产越南 | 亚洲黄色高清视频 | 久久一二区| 国产精品久久99 | 国产一区中文字幕 | av网站在线播放 | 很黄很污的网站 | 殴美成人在线视频 | 亚洲视频一区二区三区 | 欧美日韩精品久久久免费观看 | 日本三级做a全过程在线观看 |