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

標題: 基于STC15W4K32S4單片機的兩路搶答器Proteus仿真程序 [打印本頁]

作者: 54545545    時間: 2021-7-15 21:11
標題: 基于STC15W4K32S4單片機的兩路搶答器Proteus仿真程序
功能組成:運行仿真,LCD1602顯示24C04保存的數據,按鍵一:搶答開始按鍵,當按鍵按下,倒計時開始,規(guī)定時間內,按鍵A,按鍵B做出搶答,刷新LCD1602的得分并保存到24C04中,按鍵4清零24C04的數據。仿真圖如下:


單片機源程序如下:
#include "config.h"
#include "USART1.h"
#include "delay.h"
#include "lcd1602.h"
#include "IIC.h"
#include "timer.h"
#include "GPIO.h"

sbit k1=P4^0;
sbit k2=P4^2;
sbit k3=P4^5;
sbit k4=P4^7;

sbit A0=P7^0;
sbit A1=P7^1;
sbit A2=P7^2;
sbit BEEP = P7^7;

uchar code DSY_CODE[]=
{
  0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0
};
unsigned char dat1=0, dat2=0, dat3 =0;
unsigned char times=0,tim=0,start=0,off=0,kes=0;

void UART_config(void);
void Timer_config(void);
uchar scan_key(void);

void main(void)
{
        u8        i;

        UART_config();
        Timer_config();
        EA = 1;

            LCD_init();        
        s_connectionreset();
        
            dat1 = Read_24C02(0x01);
            dat2 = Read_24C02(0x03);
                dat3 = Read_24C02(0x05);
        
        LCD_disp_str(0,1," Responder Game");
                LCD_disp_str(0,2,"A->");
            LCD_disp_str(5,2,"B->");
        LCD_disp_char(3,2,dat1+'0');
            LCD_disp_char(8,2,dat2+'0');
        
         
//                Write_24C02(0x01, dat1);
//                delay_ms(100);
//                Write_24C02(0x03, dat2);
//                delay_ms(100);
//                Write_24C02(0x05, dat3);
               
                BEEP = 0;
               
               
        while (1)
        {        
//                dat1++;
//                Write_24C02(0x01, dat1);
//                delay_ms(300);
//        dat1 = Read_24C02(0x01);
//                LCD_disp_char(3,2,dat1+'0');
                scan_key();
                if(dat1>=9) dat1=0;
                if(dat2>=9) dat2=0;
                //delay_ms(600);

               
                if(COM1.RX_TimeOut > 0)                //超時計數
                {
                        if(--COM1.RX_TimeOut == 0)
                        {
                                if(COM1.RX_Cnt > 0)
                                {
                                        for(i=0; i<COM1.RX_Cnt; i++)        TX1_write2buff(RX1_Buffer[ i]);        //收到的數據原樣返回
                                }
                                COM1.RX_Cnt = 0;
                        }
                }
        }
}

uchar scan_key(void)
{
     if(k1==0)
                {
                        delay_ms(100);
                        if(k1==0)
                        {
                                A0=1;A1=1;A2=1;
                                start=1;
                                PrintString1("游戲開始!開始搶答\r\n");
                        }               
                }
               
        if((k2==0)&&(start==1))
        {
           delay_ms(10);
           if(k2==0)
                {
                        A0=0;A1=0;A2=0;
                        kes=2;
                        off=1;
                        dat1++;
                        Write_24C02(0x01, dat1);
                        LCD_disp_char(3,2,dat1+'0');
                        PrintString1("A組搶答成功...\r\n");
                        BEEP = 1;
                        delay_ms(500);
                        BEEP = 0;
                }
        }
        if((k3==0)&&(start==1))
        {
           delay_ms(10);
           if(k3==0)
                {
                        A0=1;A1=0;A2=0;
                        off=1;
                        dat2++;
                        kes=3;
                        Write_24C02(0x03, dat2);
                        LCD_disp_char(8,2,dat2+'0');
                        PrintString1("B組搶答成功...\r\n");
                        BEEP = 1;
                        delay_ms(500);
                        BEEP = 0;
                }
        }
        if(k4==0)
        {
           delay_ms(10);
           if(k4==0)
                {
                        dat1=dat2=0;
                        Write_24C02(0x01, dat1);
                        delay_ms(100);
                        Write_24C02(0x03, dat2);
                        delay_ms(100);
                        LCD_disp_char(3,2,dat1+'0');
                LCD_disp_char(8,2,dat2+'0');
                }
        }
}
/*************  串口1初始化函數 *****************/
void        UART_config(void)
{
        COMx_InitDefine                COMx_InitStructure;                                        //結構定義
        COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;                //模式,       UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
        COMx_InitStructure.UART_BRT_Use   = BRT_Timer2;                        //使用波特率,   BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
        COMx_InitStructure.UART_BaudRate  = 9600ul;                        //波特率, 一般 110 ~ 115200
        COMx_InitStructure.UART_RxEnable  = ENABLE;                                //接收允許,   ENABLE或DISABLE
        COMx_InitStructure.BaudRateDouble = DISABLE;                        //波特率加倍, ENABLE或DISABLE
        COMx_InitStructure.UART_Interrupt = ENABLE;                                //中斷允許,   ENABLE或DISABLE
        COMx_InitStructure.UART_Polity    = PolityLow;                        //中斷優(yōu)先級, PolityLow,PolityHigh
        COMx_InitStructure.UART_P_SW      = UART1_SW_P30_P31;        //切換端口,   UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必須使用內部時鐘)
        COMx_InitStructure.UART_RXD_TXD_Short = DISABLE;                //內部短路RXD與TXD, 做中繼, ENABLE,DISABLE
        USART_Configuration(USART1, &COMx_InitStructure);                //初始化串口1 USART1,USART2

        PrintString1("STC15F2K60S2 UART1 Test Prgramme!\r\n");        //SUART1發(fā)送一個字符串
}

void Timer_config(void)
{
        TIM_InitTypeDef                TIM_InitStructure;                                        //結構定義
        TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
        TIM_InitStructure.TIM_Polity    = PolityLow;                        //指定中斷優(yōu)先級, PolityHigh,PolityLow
        TIM_InitStructure.TIM_Interrupt = ENABLE;                                //中斷是否允許,   ENABLE或DISABLE
        TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                        //指定時鐘源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
        TIM_InitStructure.TIM_ClkOut    = ENABLE;                                //是否輸出高速脈沖, ENABLE或DISABLE
        TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / (50*12));                //初值,
        TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后啟動定時器, ENABLE或DISABLE
        Timer_Inilize(Timer1,&TIM_InitStructure);                                //初始化Timer1          Timer0,Timer1,Timer2
}

/********************* Timer1中斷函數************************/
void timer1_int (void) interrupt TIMER1_VECTOR //20ms
{
if(start==1)
{
           times++;
           if(times>50)
           {
                 times=0;
                 tim++;
                 P6= DSY_CODE[tim];
                 if((tim==9)||(off==1))
                         {start=0;
                          tim=0;
                          off=0;}
                        
           }
}

}

全部資料51hei下載地址:
基于STC15W4K32S4的兩路搶答器.rar (239.68 KB, 下載次數: 153)



作者: 51hei團團    時間: 2021-7-17 03:50
用Proteus8.8打開LCD顯示空白,仿真失敗了
作者: kkscan0821    時間: 2022-5-16 10:28
我調試時候也遇到過LCD都是白色的問題,大家有解決的辦法嗎a

作者: QEQWE123    時間: 2024-6-18 11:09

我調試時候也遇到過LCD都是白色的問題,大家有解決的辦法嗎a





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 少妇高潮毛片 | 九色在线视频 | 色鬼久久 | 国产免费黄色 | av一二三区 | 波多野结衣亚洲一区 | 成年人小视频 | 中文日韩欧美 | 久久精品亚洲 | 日本高清www| 午夜精品免费 | 成人精品在线视频 | 亚洲精品一区二区三区精华液 | 黄色国产视频 | 日本高清www | 91视频免费在线观看 | 国产美女精品 | 国产精品美女www爽爽爽 | 一级欧美一级日韩 | 久久久久久穴 | 男人午夜视频 | 国产永久免费视频 | 夜夜夜夜操| av女优天堂 | 亚洲二三区 | 青青草网站 | 日本a视频| 免费的黄网站 | 国产亚洲视频在线观看 | 午夜在线观看免费视频 | 看一级黄色片 | 亚洲天堂网在线观看 | 国产精品视频一区二区三区 | 自拍偷拍av | 又黄又爽又刺激的视频 | 国产三级黄色片 | 日韩欧美色图 | 国产午夜一区二区三区 | av一区二区三区四区 | 成年网站在线观看 | 国产成人精品一区二区三区在线观看 |