找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这段单片机代码如何修改才能编译通过?求帮助

[复制链接]
回帖奖励 200 黑币 回复本帖可获得 50 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include"AD.h"

  2. extern BIT flag_1 = 1;
  3. void AD(INT * level)
  4. {
  5.         INT a = 0;
  6.         INT i = 0;
  7.         cs = 0;
  8.         wr = 1;
  9.         rd = 1;
  10.         IT0 = 0;
  11.         EX0 = 1;
  12.         P1 = 0xff;
  13.         for(i = 0; i < 1; ++i)
  14.         {
  15.                 flag_1 = 1;
  16.                 wr = 1;
  17.                 _nop_();
  18.                 _nop_();
  19.                 wr = 0;
  20.                 _nop_();
  21.                 //_nop_();

  22.                 P1 = 0xff;
  23.                 while(flag_1);

  24.                 rd = 1;
  25.                 _nop_();
  26.                 rd = 0;
  27.                 _nop_();
  28.                 AD_Latch = 1;
  29. //                for(j = 0; j < 10; j++)
  30. //                {
  31. //                        delay(20);
  32. //                }
  33.                 delay(100);
  34.                 AD_Latch = 0;
  35.                 rd = 1;
  36.                 a = P1;
  37. //                delay(100);                                                                                                                                                                                                         
  38.                 P1 = 0xff;
  39.                 //P1[i] = P1;
  40.                 //sum = sum + P1;
  41.         }
  42.         //a = (DOUBLE)(sum) / (i + 1);
  43.         if(a < 32)
  44.         {
  45.                 (*level) = 0;
  46.         }
  47.         else if(a < 64)
  48.         {
  49.                 (*level) = 1;
  50.         }
  51.         else if(a < 96)
  52.         {
  53.                 (*level) = 2;
  54.         }
  55.         else if(a < 128)
  56.         {
  57.                 (*level) = 3;
  58.         }
  59.         else if(a < 160)
  60.         {
  61.                 (*level) = 4;
  62.         }
  63.         else if(a < 192)
  64.         {
  65.                 (*level) = 5;
  66.         }
  67.         else if(a < 224)
  68.         {
  69.                 (*level) = 6;
  70.         }
  71.         else if(a < 255)
  72.         {
  73.                 (*level) = 7;
  74.         }
  75. }

  76. void into() interrupt 0
  77. {
  78.         EX0 = 0;
  79.         flag_1 = 0;
  80.         EX0 = 1;
  81. }

  82. //******************延时函数*********************

  83. #include"delay.h"

  84. void delay(USHORT a)
  85. {
  86.         USHORT j;
  87.         for(; a > 0; --a)
  88.         {
  89.                 for(j = 110; j > 0; --j)
  90.                 {
  91.                         ;
  92.                 }
  93.         }
  94. }


  95. #include"keyboard.h"
  96. extern BIT flag;
  97. INT keyboard(INT  * level)
  98. {
  99.         DWORD i = 0;
  100.         if(key == 0)
  101.         {
  102.                 delay(50);
  103.                 if(key == 0)
  104.                 {
  105.                         flag = !flag;
  106.                         while(key == 0)
  107.                         {
  108.                                 ;
  109.                         }
  110.                         //i = 0;
  111.                 }
  112.         }
  113.         //level = level;
  114.         if(key_up == 0 && flag == 0)
  115.         {
  116.                 delay(50);
  117.                 if(key_up == 0 && flag == 0)
  118.                 {
  119.                         if((*level) < 7)
  120.                         {
  121.                                 (*level) = (*level) + 1;        
  122.                         }
  123.                         
  124.                         while(key_up == 0)
  125.                         {
  126.                                 ;
  127.                         }
  128.                         //i = 0;
  129.                 }
  130.         }

  131.         if(key_down == 0 && flag == 0)
  132.         {
  133.                 delay(50);
  134.                 if(key_down == 0 && flag == 0)
  135.                 {
  136.                         if((*level) > 0)
  137.                         {
  138.                                 (*level) = (*level) - 1;
  139.                         }
  140.                         while(key_down == 0)
  141.                         {
  142.                             ;
  143.                         }
  144.                         //i = 0;
  145.                 }
  146.         }
  147.         return 0;
  148. }

  149. #include"segdisplay.h"

  150. void segdisplay(INT level)
  151. {
  152.         switch(level)
  153.         {
  154.                 case(0):
  155.                 SEG1 = 0;
  156.                 SEG2 = 0;
  157.                 SEG3 = 0;
  158.                 break;

  159.                 case(1):
  160.                 SEG1 = 1;
  161.                 SEG2 = 0;
  162.                 SEG3 = 0;
  163.                 break;

  164.                 case(2):
  165.                 SEG1 = 0;
  166.                 SEG2 = 1;
  167.                 SEG3 = 0;
  168.                 break;

  169.                 case(3):
  170.                 SEG1 = 1;
  171.                 SEG2 = 1;
  172.                 SEG3 = 0;
  173.                 break;

  174.                 case(4):
  175.                 SEG1 = 0;
  176.                 SEG2 = 0;
  177.                 SEG3 = 1;
  178.                 break;

  179.                 case(5):
  180.                 SEG1 = 1;
  181.                 SEG2 = 0;
  182.                 SEG3 = 1;
  183.                 break;

  184.                 case(6):
  185.                 SEG1 = 0;
  186.                 SEG2 = 1;
  187.                 SEG3 = 1;
  188.                 break;

  189.                 case(7):
  190.                 SEG1 = 1;
  191.                 SEG2 = 1;
  192.                 SEG3 = 1;
  193.                 break;

  194.                 default:
  195.                 ;
  196.                 //
  197.         }
  198.         SEG_Latch = 1;
  199.         delay(100);
  200.         SEG_Latch = 0;
  201. }

  202. #include<reg51.h>
  203. #include"typedef.h"
  204. #include"delay.h"
  205. #include"keyboard.h"
  206. #include"segdisplay.h"
  207. #include"AD.h"
  208. extern DWORD num = 0;
  209. extern BIT flag = 0;
  210. INT level = 4;
  211. INT * plevel = &level;
  212. void main()
  213. {
  214. //        //打开外部中断0
  215. //        IT0 = 1;
  216. //        EX0 = 1;
  217. //
  218. //        //设置外部中断1,不打开
  219. //        IT1 = 1;
  220. //        EX1 = 0;
  221.         open = 0;
  222.         delay(100);
  223.         while(1)
  224.         {        
  225.                 if(open != 0)
  226.                 {
  227.                         break;
  228.                 }
  229.         }                                          
  230.         TMOD = 0x11;
  231.         //打开定时器
  232.         TH0 = (65535 - 40) / 256;
  233.         TL0 = (65535 - 40) % 256;
  234.         TH1 = (65535 - 1000) / 256;
  235.         TL1 = (65535 - 1000) % 256;
  236.         
  237.         //打开总中断
  238.     EA = 1;
  239.         ET0 = 1;
  240.         ET1 = 1;
  241.         TR0 = 1;


  242.         while(1)
  243.         {
  244.                 //检测键盘
  245.                 //TR0 = 0;
  246.                 keyboard(plevel);
  247.                 segdisplay(level);
  248.                 //TR0 = 1;
  249.                 if(flag == 1)
  250.                 {        
  251.                         AD(plevel);
  252.                     //TR0 = 0;
  253.                         //TR1 = 1;
  254.                         //TR0 = 1;
  255.                 }
  256.                 else
  257.                 {
  258.                         TR1 = 0;
  259.                 }
  260.         }
  261. }

  262. void T0_time() interrupt 1
  263. {
  264.         TR0 = 0;
  265.         TH0 = (65535 - 40) / 256;
  266.         TL0 = (65535 - 40) % 256;
  267.         num++;
  268.         if(num > 7)
  269.         {
  270.                 num = 0;
  271.         }
  272.         if(num >= level)
  273.         {
  274.                 PWM = 1;
  275.         }                                                                                                                          
  276.         else
  277.         {
  278.                 PWM = 0;
  279.         }
  280.         TR0 = 1;
  281. }

  282. void T1_time() interrupt 3
  283. {
  284.         TR1 = 0;
  285.         AD(plevel);
  286.         TH1 = (65535 - 1000) / 256;
  287.         TL1 = (65535 - 1000) % 256;
  288.         TR1 = 1;
  289. }

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

使用道具 举报

沙发
ID:52944 发表于 2019-5-27 08:31 | 只看该作者
把include那些放在代码的最顶上
回复

使用道具 举报

板凳
ID:94031 发表于 2019-5-27 08:57 | 只看该作者
缺很多头文件,资料不全。
回复

使用道具 举报

地板
ID:548112 发表于 2019-5-27 09:36 | 只看该作者
第三行的extern声明的变量不能在声明的时候赋值,其他的缺太多头文件,需要确认头文件完整性
回复

使用道具 举报

5#
ID:330198 发表于 2019-5-27 11:05 | 只看该作者
头文件有没有包含进工程中?
回复

使用道具 举报

6#
ID:487821 发表于 2019-5-27 23:55 | 只看该作者
这样的代码是自己写的吗,习贯很不好,估计没几个人愿意认真给你看完,包含了这么多.h头文件,.h的代码呢
回复

使用道具 举报

7#
ID:522450 发表于 2019-5-28 10:27 | 只看该作者
先把所有头文件放在同一个工程文件里再编译试试吧,这个是最基础的问题,其它问题再议。
回复

使用道具 举报

8#
ID:549213 发表于 2019-5-28 13:23 | 只看该作者
  把include那些放在代码的最顶上,头文件有没有包含进工程中,第三行的extern声明的变量不能在声明的时候赋值,其他的缺太多头文件,需要确认头文件完整性
回复

使用道具 举报

9#
ID:549213 发表于 2019-5-28 13:23 | 只看该作者
头文件有没有包含进工程中,先把所有头文件放在同一个工程文件里再编译试试吧,这个是最基础的问题,其它问题再议。
回复

使用道具 举报

10#
ID:510365 发表于 2019-5-28 14:20 | 只看该作者
缺头文件
回复

使用道具 举报

11#
ID:549320 发表于 2019-5-28 15:41 | 只看该作者
extern BIT flag_1 = 1;这句只声明不要赋值;其他的是缺少相应的头文件引用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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