2019年電賽F題
單片機源程序如下:
- //////////////////////////////////////////////////////////////////////////////////
- //本程序只供學習使用,未經作者許可,不得用于其它任何用途
- //
- // 文 件 名 : main.c
- // 版 本 號 : v2.0
- // 作 者 : HuangKai
- // 生成日期 : 2014-0101
- // 最近修改 :
- // 功能描述 : OLED 4接口演示例程(51系列)
- // 說明:
- // ----------------------------------------------------------------
- // GND 電源地
- // VCC 接5V或3.3v電源
- // D0 P1^0(SCL)
- // D1 P1^1(SDA)
- // RES 接P12
- // DC 接P13
- // CS 接P14
- // ----------------------------------------------------------------
- // 修改歷史 :
- // 日 期 :
- // 作 者 : HuangKai
- // 修改內容 : 創建文件
- //版權所有,盜版必究。
- //Copyright(C) 中景園電子2014/3/16
- //All rights reserved
- //******************************************************************************/
- #include "reg51.h"
- #include "oled.h"
- sbit buzz=P3^6;
- sbit LED=P2^0;
- sbit s1=P2^4;
- int t,S;
- bit flag = 0;
- char i;
- u8 count = 0;
- u8 time = 0;
- u8 temp;
- void init()
- {
- EA = 1;
- ET0 = 1;
- ET1 = 1;
- TMOD = 0x16;
- TH0 = 0x00;
- TL0 = 0x00;
- TR0 = 1;
- TH1 = (65536 - 50000) / 256;
- TL1 = (65536 - 50000) % 256;
- TR1 = 1;
- }
- void delay(u8 z)
- {
- u8 x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- int main(void)
- {
- OLED_Clear();
- OLED_Init(); //初始化OLED
- init();
- OLED_Clear();
- OLED_ShowCHinese(36,0,0);//歡
- OLED_ShowCHinese(54,0,1);//迎
- OLED_ShowCHinese(72,0,2);//使
- OLED_ShowCHinese(90,0,3);//用
- OLED_ShowCHinese(10,2,4);//紙
- OLED_ShowCHinese(28,2,5);//張
- OLED_ShowCHinese(46,2,6);//計
- OLED_ShowCHinese(64,2,7);//數
- OLED_ShowCHinese(82,2,8);//裝
- OLED_ShowCHinese(100,2,9);//置
- OLED_ShowCHinese(0,4,10);//紙
- OLED_ShowCHinese(18,4,11);//張
- OLED_ShowCHinese(36,4,12);//數
- OLED_ShowString(52,5,":",2);
- OLED_ShowCHinese(108,4,11);//張
- OLED_ShowCHinese(0,6,13);//時
- OLED_ShowCHinese(18,6,14);//間
- OLED_ShowString(32,7,":",2);
- OLED_ShowString(50,7,"MS",2);
- delay_ms(50);
- while(1)
- {
-
- if (flag == 1)
- {
- temp=count;
- temp=temp*1.113*0.5712;
- if(temp<16) {t=0; buzz=0; delay_ms(300); buzz=1; }
- else if((temp>16)&&(temp<23)) t=1;
- else if((temp>23)&&(temp<29)) t=2;
- else if((temp>29)&&(temp<34)) t=3;
- else if((temp>34)&&(temp<39)) t=4;
- else if((temp>39)&&(temp<44)) t=5;
- else if((temp>44)&&(temp<48)) t=6;
- else if((temp>48)&&(temp<52)) t=7;
- else if((temp>52)&&(temp<56)) t=8;
- else if((temp>56)&&(temp<59)) t=9;
- else if((temp>59)&&(temp<64)) t=10;
- else if((temp>64)&&(temp<67)) t=11;
- else if((temp>67)&&(temp<70)) t=12;
- else if((temp>70)&&(temp<73)) t=13;
- else if((temp>73)&&(temp<75)) t=14;
- else if((temp>75)&&(temp<78)) t=15;
- else if((temp>78)&&(temp<79)) t=16;
- else if((temp>79)&&(temp<82)) t=17;
- else if((temp>82)&&(temp<84)) t=18;
- else if((temp>84)&&(temp<86)) t=19;
- else if((temp>86)&&(temp<88)) t=20;
- else if((temp>88)&&(temp<90)) t=21;
- else if((temp>90)&&(temp<92)) t=22;
- else if((temp>92)&&(temp<95)) t=23;
- else if((temp>95)&&(temp<97)) t=24;
- else if((temp>97)&&(temp<99)) t=25;
- else if((temp>99)&&(temp<100)) t=26;
- else if((temp>100)&&(temp<101)) t=27;
- else if((temp>101)&&(temp<103)) t=28;
- else if((temp>103)&&(temp<105)) t=29;
- else if((temp>105)&&(temp<106)) t=30;
- else if((temp>106)&&(temp<107)) t=31;
- else if((temp>107)&&(temp<108)) t=32;
- else if((temp>108)&&(temp<109)) t=33;
- else if((temp>109)&&(temp<110)) t=34;
- else if((temp>110)&&(temp<113)) t=35;
- else if((temp>113)&&(temp<115)) t=36;
- else if((temp>115)&&(temp<117)) t=37;
- else if((temp>117)&&(temp<119)) t=38;
- else if((temp>119)&&(temp<121)) t=39;
- else if((temp>121)&&(temp<124)) t=40;
- else if((temp>124)&&(temp<127)) t=41;
- else if((temp>127)&&(temp<130)) t=42;
- else if((temp>130)&&(temp<133)) t=43;
- else if((temp>133)&&(temp<135)) t=44;
- else if((temp>135)&&(temp<139)) t=45;
- else if((temp>139)&&(temp<142)) t=46;
- else if((temp>142)&&(temp<144)) t=47;
- else if((temp>144)&&(temp<147)) t=48;
- else if((temp>147)&&(temp<149)) t=49;
- else if((temp>149)&&(temp<151)) t=50;
-
- OLED_ShowNum(40,7,S,2);
- OLED_ShowNum(70,5,t/10,2);
- OLED_ShowNum(80,5,t%10,2);
- delay_ms(100) ;
- if(s1==0)
- {
- delay(10);
- if(s1==0)
- {
- EA=1;
- count=0;
- flag=0;
- delay(20);
- }
- }
- }
- }
-
- }
-
-
- void Count0()interrupt 1
- {
-
- ++count;
- ++S;
- }
- void Time1()interrupt 3
- {
- if(flag==0)
- {
- TH1 = (65536 - 50000) / 256;
- TL1 = (65536 - 50000) % 256;
- ++time;
- if (time == 20)
- {
- time=0;
- EA = 0;
- TH0 = 0x00;
- TL0 = 0x00;
- flag = 1;
- buzz=0;
- LED=1;
- delay_ms(300);
- buzz=1;
- LED=0;
- flag=1;
- }
- }
- }
復制代碼
所有資料51hei提供下載:
F題紙張計數顯示裝置.zip
(103.2 KB, 下載次數: 109)
2020-3-12 17:26 上傳
點擊文件名下載附件
|