找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有大佬帮我看看,单片机代码写的对不对吗?

[复制链接]
跳转到指定楼层
楼主
是4T平台上面那个单片机模拟赛二,我不知道哪错了,那个评分里面只有led是对的。

单片机源程序如下:
  1. #include "STC15F2K60S2.H"
  2. #include "jiben.h"
  3. #include "onewire.h"
  4. #include "iic.h"
  5. #include "intrins.h"

  6. #define uint unsigned int
  7. #define uchar unsigned char
  8.         
  9. uchar ledbuf[]={0,0,0,0,0,0,0,0};

  10. uchar kdly;

  11. uint sdly;
  12. uchar spos;
  13. uchar smgbuf[]={16,16,16,16,16,16,16,16};
  14. uchar smgpoint[]={0,0,0,0,0,0,0,0};

  15. bit jiemian;
  16. bit mode;
  17. float temp=30;
  18. uchar ad;
  19. uchar da;

  20. void Delay750ms()                //@11.0592MHz
  21. {
  22.         unsigned char i, j, k;

  23.         _nop_();
  24.         _nop_();
  25.         i = 35;
  26.         j = 51;
  27.         k = 182;
  28.         do
  29.         {
  30.                 do
  31.                 {
  32.                         while (--k);
  33.                 } while (--j);
  34.         } while (--i);
  35. }


  36. void keydo()
  37. {
  38.         static kv,ko,kd,ku;
  39.         
  40.         if(kdly)
  41.                 return;
  42.         kdly=1;
  43.         
  44.         kv=keydis();
  45.         kd=(kv&(kv^ko));
  46.         ku=~(kv&(kv^ko));
  47.         ko=kv;
  48.         
  49.         if(kd==4 && jiemian==0)
  50.         {
  51.                 mode^=1;
  52.         }
  53.         if(kd==5)
  54.         {
  55.                 jiemian^=1;
  56.         }
  57. }

  58. void smgdo()
  59. {
  60.         if(sdly)
  61.                 return;
  62.         sdly=1;
  63.         
  64.         ad=readad(0x41);
  65.         temp=readtemp();
  66.         
  67.         if(mode==0)
  68.         {
  69.                 if(temp>=10 && temp<=40)
  70.                         da=(1+((temp-10.0)*2/15))*51;
  71.                 else if(temp>40)
  72.                         da=255;
  73.                 else
  74.                         da=51;
  75.         }
  76.         else
  77.         {
  78.                 if(ad>=10 && ad<=240)
  79.                         da=(1+((ad-10)*1/60))*51;
  80.                 else if(ad>240)
  81.                         da=255;
  82.                 else
  83.                         da=51;
  84.         }
  85.         
  86.         if(jiemian==0)
  87.         {
  88.                 if(mode==0)
  89.                 {
  90.                         smgbuf[0]=1;
  91.                         smgbuf[5]=(uchar)temp/10;
  92.                         smgbuf[6]=(uchar)temp%10;
  93.                         smgbuf[7]=(uint)(temp*10)%10;
  94.                         smgpoint[6]=1;
  95.                 }
  96.                 else
  97.                 {
  98.                         smgbuf[0]=2;
  99.                         smgbuf[5]=16;
  100.                         smgbuf[6]=(uint)((ad*10)/51)/10;
  101.                         smgbuf[7]=(uint)((ad*10)/51)%10;
  102.                         smgpoint[6]=0;
  103.                 }
  104.         }
  105.         else
  106.         {
  107.                 adout(da);
  108.                 smgbuf[0]=18;
  109.                 smgbuf[5]=16;
  110.                 smgbuf[6]=(uint)((da*10)/51)/10;
  111.                 smgbuf[7]=(uint)((da*10)/51)%10;
  112.                 smgpoint[6]=1;
  113.         }
  114. }

  115. void leddo()
  116. {
  117.         ledbuf[0]=(mode==0);
  118.         ledbuf[1]=(mode==1);
  119. }

  120. void Timer0Init(void)                //1??@12.000MHz
  121. {
  122.         AUXR &= 0x7F;               
  123.         TMOD &= 0xF0;               
  124.         TL0 = 0x18;               
  125.         TH0 = 0xFC;               
  126.         TF0 = 0;               
  127.         TR0 = 1;               
  128.         ET0 = 1;
  129.         EA = 1;
  130. }

  131. void timer0() interrupt 1
  132. {
  133.         if(++spos==8)
  134.                 spos=0;
  135.         if(++kdly==10)
  136.                 kdly=0;
  137.         if(++sdly==500)
  138.                 sdly=0;
  139.         
  140.         smgdis(spos,smgbuf[spos],smgpoint[spos]);
  141.         leddis(spos,ledbuf[spos]);
  142. }

  143. void main()
  144. {
  145.         Delay750ms();
  146.         Timer0Init();
  147.         init();
  148.         readtemp();
  149.         while(1)
  150.         {
  151.                 keydo();
  152.                 smgdo();
  153.                 leddo();
  154.         }
  155. }
复制代码

15_SCM2.rar

66.33 KB, 下载次数: 1

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

使用道具 举报

沙发
ID:1058641 发表于 2024-4-6 11:41 | 只看该作者
为啥不对呢?板子上我感觉没啥问题啊,至少切换界面是对的吧。
回复

使用道具 举报

板凳
ID:883242 发表于 2024-4-6 22:48 | 只看该作者
没有题目谁知道到底对不对?
回复

使用道具 举报

地板
ID:1058641 发表于 2024-4-7 11:03 | 只看该作者
我的我的
这是题目要求

4T15届模拟2.png (294.13 KB, 下载次数: 68)

4T15届模拟2.png
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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