找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1218|回复: 0
打印 上一主题 下一主题
收起左侧

蓝桥杯第七届省赛单片机代码,欢迎各位指教

[复制链接]
跳转到指定楼层
楼主
ID:888236 发表于 2021-3-9 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人大二菜鸡一枚,今年参加蓝桥杯,感觉陪跑,这是我参考写的第七届代码,请大家指教。

单片机源程序如下:
  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;//数码管选择
  25.                 P2=0xc0;P0=t_com[i];P2=0;//二极管点亮
  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;}//二极管工作模式点亮
  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. }
复制代码

hex文件: 蓝桥杯第七届.zip (5.88 KB, 下载次数: 4)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表