|
附件里面有省賽程序題及客觀題(客觀題無(wú)答案)及我自己寫(xiě)的源代碼以下是程序設(shè)計(jì)題題目
10P-DPJ-2_Page1.png (34.74 KB, 下載次數(shù): 96)
下載附件
這是程序設(shè)計(jì)題第一頁(yè)
2019-4-29 17:29 上傳
10P-DPJ-2_Page2.png (35.85 KB, 下載次數(shù): 65)
下載附件
這是程序設(shè)計(jì)題第二頁(yè)
2019-4-29 17:29 上傳
10P-DPJ-2_Page3.png (37.82 KB, 下載次數(shù): 62)
下載附件
這是程序設(shè)計(jì)題第三頁(yè)
2019-4-29 17:29 上傳
10P-DPJ-2_Page4.png (21.72 KB, 下載次數(shù): 61)
下載附件
這是程序設(shè)計(jì)題第四頁(yè)
2019-4-29 17:29 上傳
以下是單片機(jī)主函數(shù),有完整的注釋。
- #include "STC15F2K60S2.H"
- #include "MAIN.H"
- #include "HAREWARE.H"
- #include "DIG.H"
- #include "I2C.H"
- #include "DELAY.H"
- #include "LED.H"
- sbit s4 = P3^3;//按鍵S4
- sbit s5 = P3^2;//按鍵S5
- sbit s6 = P3^1;//按鍵S6
- sbit s7 = P3^0;//按鍵S7
- unsigned int PCF_NUM = 0;//電壓值
- unsigned char led_mode = 0xff; //LED燈點(diǎn)亮模式
- unsigned int f_num = 0;//頻率數(shù)值
- unsigned char j = 0;//頻率測(cè)量里面的等待中斷標(biāo)志
- unsigned char diya_num = 0;//儲(chǔ)存模數(shù)轉(zhuǎn)換返回的電壓值
- unsigned char timer = 0;
- bit s4_mode = 1;//1為電壓測(cè)量模式,0為頻率測(cè)量模式
- bit s5_mode = 0;//1為輸出2.0v電壓,為0跟隨PCF8591三通道電壓輸出
- bit s6_mode = 1;//1為開(kāi)啟LED燈顯示,0為關(guān)顯示
- bit s7_mode = 1;//1為開(kāi)啟數(shù)碼管顯示,0為關(guān)顯示
- bit gensui = 0;//0為不跟隨電壓輸出,1為跟隨電壓輸出
- unsigned char useg_num[]={0x3e,0,0,0,0,0,0,0};//電壓數(shù)值數(shù)組
- unsigned char fseg_num[]={0x71,0,0,0,0,0,0,0};//頻率數(shù)值數(shù)組
-
- void key_scan();//按鍵掃描函數(shù)原型
- unsigned char dian_ya_ce_liang(); //電壓測(cè)量函數(shù)原型
- void TimerInit();//定時(shí)計(jì)數(shù)初始化函數(shù)原型
- /************************************************************************************************/
- /******************************************函數(shù)**************************************************/
- /************************************************************************************************/
- void main()//主函數(shù)
- {
- HAREWARE_init();//關(guān)閉外部設(shè)備
- DIG_init();//數(shù)碼管初始化
- LED_init();//LED燈初始化
- TimerInit();//定時(shí)器1初始化
- P20 = 1;
- while(1)//等待中斷
- {
- key_scan();//按鍵掃描
- if(~s5_mode)//判斷是否是電壓跟隨模式
- {
- PCF_DA(103); //沒(méi)有跟隨
- gensui = 0; //沒(méi)有跟隨
- }
- else
- {
- gensui = 1; //跟隨電壓
- }
- if(s4_mode)//判斷是否為電壓測(cè)量模式
- {
- diya_num = dian_ya_ce_liang();
- led_mode = 0xfe;//電壓測(cè)量模式指示燈亮
- if(((diya_num * 0.01953125 >= 1.5) && (diya_num * 0.01953125 < 2.5)) || (diya_num * 0.01953125 >= 3.5))
- {
- led_mode &= 0xfb;//滿(mǎn)足條件第三個(gè)指示燈亮
- }
- if(gensui)
- {
- led_mode &= 0xef;//電壓跟隨第五個(gè)指示燈亮
- }
- PCF_NUM = diya_num * 1.953125;//變成十進(jìn)制的數(shù)字,把小數(shù)乘一百
- useg_num[5]=DIG_CODE[PCF_NUM/100];//百位數(shù)字
- PCF_NUM = PCF_NUM % 100;
- useg_num[6]=DIG_CODE[PCF_NUM/10];//十位數(shù)字
- PCF_NUM %=10;
- useg_num[7]=DIG_CODE[PCF_NUM];//個(gè)位數(shù)字
- LED_show(led_mode);//LED等顯示
- DIG_show(useg_num);//數(shù)碼管顯示
- if(gensui)//判斷是否是電壓跟隨模式
- {
- PCF_DA(diya_num); //沒(méi)有跟隨
- }
- }
- else//頻率測(cè)量模式
- {
- TR1 = 1;//開(kāi)始計(jì)時(shí)
- TR0 = 1;//開(kāi)始計(jì)數(shù)
- j = 1;//等待中斷標(biāo)志置1
- while(j);//等待中斷
- }
- }
- }
- ////////////////////////////////////////////////////
- ////////////////////////////////////////////////////
- void TimerInit()//定時(shí)計(jì)數(shù)器初始化函數(shù)
- {
- AUXR &= 0x3F;//12分頻
- TMOD &= 0x00;//TMOD(定時(shí)/計(jì)數(shù)器模式寄存器)清零
- TMOD |= 0x15;//T0設(shè)置為模式1,計(jì)數(shù);T1設(shè)置為模式1,定時(shí)
- TH0 = TL0 = 0;//計(jì)數(shù)器清零
- TL1 = 0xF0; //設(shè)置定時(shí)初值
- TH1 = 0xD8; //設(shè)置定時(shí)初值
- EA = 1;//開(kāi)總中斷
- ET1 = 1;//開(kāi)定時(shí)器1中斷
- }
- ///////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////
- unsigned char dian_ya_ce_liang()
- {
- return PCF_AD(3);//返回模數(shù)轉(zhuǎn)換值
- }
- //////////////////////////////////////////////////////
- //////////////////////////////////////////////////////
- void key_scan()//鍵盤(pán)掃描函數(shù)
- {
- P3 |= 0x0f;//P3低4位設(shè)為全1
- if(~s4)//判斷S4按鍵
- {
- delay1ms(5);//按鍵消抖
- if(~s4)//判斷S4按鍵
- {
- s4_mode = ~s4_mode;
- }
- }
- if(~s5)//判斷S5按鍵
- {
- delay1ms(5);//按鍵消抖
- if(~s5)//判斷S5按鍵
- {
- if(s4_mode)//如果在電壓測(cè)量模式則改變電壓跟隨標(biāo)志
- {
- s5_mode = ~s5_mode;//s5_mode取反
- }
-
- }
- }
- if(~s6)//判斷S6按鍵
- {
- delay1ms(5);//按鍵消抖
- if(~s6)//判斷S6按鍵
- {
- s6_mode = ~s6_mode;
- if(~s6_mode)
- {
- LED_init();//關(guān)LED燈
- }
-
- }
- }
- if(~s7)//判斷S7按鍵
- {
- delay1ms(5);//按鍵消抖
- if(~s7)//判斷S7按鍵
- {
- s7_mode = ~s7_mode;//取反
- if(~s7_mode)//如果數(shù)碼管開(kāi)關(guān)標(biāo)志為0,關(guān)數(shù)碼管顯示
- {
- DIG_init();//關(guān)數(shù)碼管
- }
-
- }
- }
- while(~s4||~s5||~s6||~s7)//松手檢測(cè)
- {
- if(s4_mode)//如果為電壓測(cè)量模式,數(shù)碼管顯示電壓值,防止出現(xiàn)數(shù)碼管黑屏現(xiàn)象
- {
- DIG_show(useg_num);//數(shù)碼管顯示電壓測(cè)量值
- LED_show(led_mode);//LED顯示電壓測(cè)量模式
- }
- else//如果為頻率測(cè)量模式,數(shù)碼管顯示頻率值,防止出現(xiàn)數(shù)碼管黑屏現(xiàn)象
- {
- DIG_show(fseg_num);//數(shù)碼管顯示頻率測(cè)量值
- LED_show(led_mode);//LED顯示頻率測(cè)量模式
- }
- }
- }
- /*//////////////////////////////////////////
- ///////////定時(shí)器1中斷函數(shù)/////////////////
- //////////////////////////////////////////*/
- void T1()interrupt 3//定時(shí)器1中斷函數(shù)
- {
- unsigned char i = 0;
- unsigned int f_num2 = 0;
- P20 = ~P20;
- TR0 = 0;//停止計(jì)數(shù)
- TR1 = 0;//停止定時(shí)
- TL1 = 0xF0;//設(shè)置定時(shí)初值
- TH1 = 0xD8;//設(shè)置定時(shí)初值
- timer++;//計(jì)數(shù)器加1
- j = 0;//等待中斷標(biāo)志清零
- if(timer == 20)
- {
- f_num = (TH0 * 256 + TL0) * 5; //計(jì)算頻率
- timer = 0;
- TL0 = TH0 = 0;//計(jì)數(shù)器清零
- for(i=7;i>2;i--)//重新初始化頻率數(shù)值數(shù)組
- {
- fseg_num[i] = 0;//除數(shù)組的第一位和第二位其他的初始化為0
- }
- if((f_num >= 1000 && f_num < 5000)||(f_num >= 10000))
- {
- led_mode = 0XF5;//滿(mǎn)足條件led4亮
- }
- else
- {
- led_mode = 0XFD;
- }
- for(i = 7;i>2 && f_num != 0;i--)
- {
- fseg_num[i] = DIG_CODE[f_num % 10];
- f_num /= 10;
- }
- }
- LED_show(led_mode);
- DIG_show(fseg_num);
- }
復(fù)制代碼 全部的程序請(qǐng)到附件里面下載
0.png (39.09 KB, 下載次數(shù): 74)
下載附件
2019-4-29 21:39 上傳
全部資料51hei下載地址:
2019年第10屆.rar
(760.55 KB, 下載次數(shù): 214)
2019-4-29 17:35 上傳
點(diǎn)擊文件名下載附件
這是程序源代碼及題目 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|