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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1505|回復(fù): 0
收起左側(cè)

藍(lán)橋杯第七屆省賽單片機(jī)代碼,歡迎各位指教

[復(fù)制鏈接]
ID:888236 發(fā)表于 2021-3-9 16:33 | 顯示全部樓層 |閱讀模式
本人大二菜雞一枚,今年參加藍(lán)橋杯,感覺(jué)陪跑,這是我參考寫(xiě)的第七屆代碼,請(qǐng)大家指教。

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<onewire.h>
  3. #include<intrins.h>

  4. sfr AUXR=0X8e;
  5. sbit pwm_out=P3^4;
  6. code unsigned char t_display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00};
  7. code unsigned char t_com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  8. unsigned char work1[8]={0xbf,0xff,0xbf,0xff,0xff,0xff,0xff,0xff};
  9. unsigned char cont,count,work_mode,timing,T_dat,trg,temp;
  10. unsigned char start_flag=1,PWM_count=20,temp_flag=0,work_mode=0,timing_flag,dismode;
  11. void KEY()
  12. {
  13.         unsigned char readdata=P3^0xff;
  14.         trg=readdata&(readdata^cont);
  15.         cont=readdata;
  16. }
  17. void delay(unsigned int i)
  18. {
  19.         while(i--);        
  20. }
  21. void smg()
  22. { int i;
  23.                 P2=0xc0;P0=0;P2=0;//二極管全滅
  24.                 P2=0xe0;P0=work1[i];P2=0;//數(shù)碼管選擇
  25.                 P2=0xc0;P0=t_com[i];P2=0;//二極管點(diǎn)亮
  26.                 i++;if(i==8)i=0;
  27. }
  28.         void Timer0Init(void)                //100??@11.0592MHz
  29. {
  30.         AUXR |= 0x80;                //?????1T??
  31.         TMOD &= 0xF0;                //???????
  32.         TL0 = (65535-100)/255;                //??????
  33.         TH0 = (65535-100)%255;                //??????
  34.         TF0 = 0;                //??TF0??
  35.         TR0 = 1;        //???0????
  36.         ET0 = 1;
  37.         EA = 1;
  38. }
  39. void InterruptTimer0() interrupt 1
  40. {         
  41.    unsigned char count1,count2;
  42.          if(start_flag==1)
  43.          {
  44.                 count++;
  45.                  if((count==PWM_count/10)&&(timing!=0))
  46.                  {
  47.                                  if(work_mode==1){P2=0x80;P0=0xfe;P2=0;}
  48.                         else if(work_mode==2){P2=0x80;P0=0xfd;P2=0;}
  49.                         else if(work_mode==3){P2=0x80;P0=0xfb;P2=0;}//二極管工作模式點(diǎn)亮
  50.                 }        
  51.                  if(count==10)
  52.                 {
  53.                         count=0;
  54.                         P2=0x80;P0=0xff;P2=0;
  55.                 }
  56.         }
  57.         if(count2>300)
  58.         {
  59.                 count2=0;
  60.                 temp_flag=1;
  61.         }
  62.         if(count1>=1000)
  63.         {
  64.                
  65.                 count1=0;
  66.                 if(timing!=0)
  67.                 timing--;
  68.         }
  69.         
  70. }
  71.         
  72. void keyaction()
  73. {
  74.         switch(trg)
  75.         {
  76.                 /*S4*/ case 0x80:
  77.                         if(work_mode==0)
  78.                         {work_mode=1;PWM_count=30;}
  79.                         else if(work_mode==2){work_mode=3;PWM_count=70;}
  80.                         else if(work_mode==3){work_mode=1;PWM_count=20;}
  81.                         break;
  82.                 /*S5*/case 0x40:
  83.                                 start_flag=1;if(timing_flag==3)timing_flag=1;
  84.                                                                                 else if(timing_flag==4)timing_flag=2;
  85.                                                                                 else if(timing_flag==5)timing_flag=0;
  86.                 /*S8*/case 0x08: timing=0;start_flag=0;         break;        

  87.                 /*S9*/        case 0x04:if(dismode==0)dismode=1;else dismode=0;                        break;               
  88.                         
  89.                
  90.         }
  91.         
  92.         
  93. }

  94. void main()
  95. {
  96.         P2=0xa0;P0=0;P2=0;
  97.         P2=0x80;P0=0xff;P2=0;
  98.         temp=rd_temperature();
  99.         Timer0Init();

  100.         while(1)
  101.         {
  102.                 KEY();
  103.                 keyaction();
  104.                
  105.                 if(timing==0)
  106.                 {
  107.                         P2=0x80;P0=0xff;P2=0;
  108.                 }
  109.                
  110.                 if((dismode==1)&&(temp_flag==1))
  111.                 {
  112.                         temp_flag=0;
  113. //                        ET0=0;
  114.                         temp=rd_temperature();
  115. //                        ET0=1;
  116.                 }
  117.                
  118.                 if(dismode==0)
  119.                 {
  120.                         work1[0]=0xbf;work1[1]=~t_display[work_mode];work1[2]=0xbf;work1[3]=0xff;
  121.                         work1[4]=~t_display[timing/1000%10];work1[5]=~t_display[timing/100%10];work1[6]=~t_display[timing/10%10];work1[7]=~t_display[timing%10];
  122.                 }
  123.                 else if(dismode==1)
  124.                 {
  125.                         work1[0]=0xbf;work1[1]=~t_display[4];work1[2]=0xbf;work1[3]=0xff;
  126.                         work1[4]=0xff;work1[5]=0xff;work1[6]=~t_display[temp/10%10];work1[7]=~t_display[temp%10];
  127.                 }
  128.                
  129.                 if(timing_flag==0){timing=timing_flag*60;timing_flag=3;}
  130.                 else if(timing_flag==1){timing=timing_flag*60;timing_flag=4;}
  131.                 else if(timing_flag==2){timing=timing_flag*60;timing_flag=5;}
  132.                
  133.                
  134.         }
  135. }
復(fù)制代碼

hex文件: 藍(lán)橋杯第七屆.zip (5.88 KB, 下載次數(shù): 4)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表