找回密码
 立即注册

QQ登录

只需一步,快速开始

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

keil编译单片机程序出现129和136错误

[复制链接]
跳转到指定楼层
楼主
小白一枚,本学期有单片机的课就在网上找了个程序练习,但对于129和136错误不知该怎么下手,还请大神们指点迷津一下

#include<reg51.h>
#include<intrins.h>
#define  uchar  unsigned  char  //定义数据类型
#define  uint  unsigned  int
bit  flag;  //标志位
/**************1602显示字符***************/
uchar  code  table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//1602显示数组
uchar  code  tab[]="**  GAS  ALARM  **";  //1602显示字符
uchar  code  table1[]="  NOW:";
uchar  code  table2[]=" %";
/**************1602控制端口管脚定义***************/
sbit  lcdrs=P3^0;
sbit  lcdrw=P3^1;
sbit  lcden=P3^2;
sbit  start=P3^4;
/**************AD0809控制端口定义***************/
sbit  eoc=P3^3;
sbit  oe=P3^5;
sbit  CLK=P3^6;
/**************其他变量***************/
uchar  shi, ge, shi1, bai1, num;
uint  temp;
uchar  count;  //蜂鸣器常量
/**************系统延时函数***************/
void  delay(uint  z)
{
uint  x, y;
for(x=z; x>0; x--)
for(y=110; y>0; y--);
}
/**************蜂鸣器延时(500HZ)***************/
void  dely500(void)
{  
unsigned  char  i;  
for(i=250; i>0; i--)  
{  
_nop_();  
  }
}
/**************1602命令函数***************/
void  write _com(uchar  com)
{
lcdrs=0;
P1=com;
delay(1);  
lcden=1;  
delay(1);
lcden=0;
}
/**************1602数据函数***************/
void  write _data(uchar date)
{   
lcdrs=1;
P1=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/**************系统初始化***************/
void  init()
{  
oe=0;
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
temp=0;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
}
/**************1602显示函数***************/
void  voltage(uchar  ge,uchar  shi,uchar  bai1)
{  
shi=temp/1000;
ge=temp%1000/100;
shi1=temp%100/10;
bai1=temp%10;
write_com(0x80);
for(num=0;
num<16;num++)
{
write_data(tab[num]);
}
write_com(0xc0);
for(num=0;num<6;num++)
{
write_data(table1[num]);
}
write_com(0xc7);
write_data(table[shi]);
delay(1);
write_com(0xc8);
write_data(table[ge]);
delay(1);

write_com(0xc9);
write_data('.');
delay(1);

write_com(0xca);
write_data(table[shi1]);
delay(1);

write_com(0xcb);
write_data(table[bai1]);
delay(1);

write_com(0xcc);
for(num=0;num<2;num++)
{
write_data(table2[num]);
}
/***********AD转换控制程序**********/     
start=0;
start=1;
start=0;
while(!eoc);
oe=1;
temp=P2;
oe=0;
temp=(temp*2*1*98.039216/100);  //AD采样换算
/*****蜂鸣器报警程序*******/
/**可燃气体爆炸浓度:5%--16%,本设计设置为5%--15%**/         
if(temp>=200)
{           
for(count=200;count>0;count--)
{  
P0_7=~P0_7;
dely500();
}
for(count=200;count>0;count--)
{  
P0_7=~P0_7;
dely500();
dely500();
}
}
}
/**************中断***************/
void  timer0()  interrupt  1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
CLK=~CLK;  //CLK按位取反,代替方波脉冲
}
void main()
{
init();
while(1)
{
  voltage(ge,shi,bai1);
}           
}




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

使用道具 举报

沙发
ID:451718 发表于 2021-4-12 11:09 | 只看该作者
void  首字母小写!!!
回复

使用道具 举报

板凳
ID:883031 发表于 2021-4-12 14:00 | 只看该作者
/**************蜂鸣器延时(500HZ)***************/
Void ; dely500(void)
{  
unsigned char  i;  
for(i=250; i>0; i--)  
{  
_nop_();
  }
}
/**************1602命令函数***************/
Void; write; _com(uchar  com)
{
lcdrs=0;
P1=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/**************1602数据函数***************/
Void; write; _data(uchar date)
{   
lcdrs=1;
P1=date;
delay(1);
lcden=1;
}
/**************系统初始化***************/
Void; init()
{  
oe=0;
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
temp=0;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
}
这些函数的定义中,为什么void后边都加“;”?不出错才说明编译器有问题。
回复

使用道具 举报

地板
ID:881592 发表于 2021-4-12 15:03 | 只看该作者
cn_zhx 发表于 2021-4-12 14:00
/**************蜂鸣器延时(500HZ)***************/
Void ; dely500(void)
{  

不好意思,这两天找的程序太多,搞错了,错误序号也记错了
回复

使用道具 举报

5#
ID:881592 发表于 2021-4-12 15:11 | 只看该作者
cn_zhx 发表于 2021-4-12 14:00
/**************蜂鸣器延时(500HZ)***************/
Void ; dely500(void)
{  

发帖是的程序是直接复制的,所以错误较多,我已经重新编辑了贴子并附上错误截图。我修改后的错误代号是129和136,”其中129是说在"_data"前加“;”可“write_data”不是往里写数据么,为什么要加分号?
回复

使用道具 举报

6#
ID:881592 发表于 2021-4-12 15:12 | 只看该作者
robinsonlin 发表于 2021-4-12 11:09
void  首字母小写!!!

是的,这点老师讲过,是我抄代码的时候粗心了
回复

使用道具 举报

7#
ID:155507 发表于 2021-4-12 16:38 | 只看该作者
给你改了,对比一下就知道哪里错了。

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define  uchar  unsigned  char  //定义数据类型
  4. #define  uint   unsigned  int
  5. bit  flag;  //标志位
  6. /**************1602显示字符***************/
  7. uchar  code  table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  8. //1602显示数组
  9. uchar  code  tab[]="**  GAS  ALARM  **";  //1602显示字符
  10. uchar  code  table1[]="  NOW:";
  11. uchar  code  table2[]=" %";
  12. /**************1602控制端口管脚定义***************/
  13. sbit  lcdrs=P3^0;
  14. sbit  lcdrw=P3^1;
  15. sbit  lcden=P3^2;
  16. sbit  start=P3^4;
  17. /**************AD0809控制端口定义***************/
  18. sbit  eoc=P3^3;
  19. sbit  oe =P3^5;
  20. sbit  CLK=P3^6;
  21. /**************其他变量***************/
  22. sbit  P0_7=P0^7;   //------>???少写
  23. uchar  shi, ge, shi1, bai1, num;
  24. uint  temp;
  25. uchar  count;  //蜂鸣器常量
  26. /**************系统延时函数***************/
  27. void  delay(uint  z)
  28. {
  29.         uint  x, y;
  30.         for(x=z; x>0; x--)
  31.             for(y=110; y>0; y--);
  32. }
  33. /**************蜂鸣器延时(500HZ)***************/
  34. void  dely500(void)
  35. {  
  36.         unsigned  char  i;  
  37.         for(i=250; i>0; i--)  
  38.         {  
  39.                 _nop_();  
  40.         }
  41. }
  42. /**************1602命令函数***************/
  43. void  write_com(uchar  com)  //---->多了个空格字符
  44. {
  45.         lcdrs=0;
  46.         P1=com;
  47.         delay(1);  
  48.         lcden=1;  
  49.         delay(1);
  50.         lcden=0;
  51. }
  52. /**************1602数据函数***************/
  53. void  write_data(uchar date)  //--->多了个空格字符
  54. {   
  55.         lcdrs=1;
  56.         P1=date;
  57.         delay(1);
  58.         lcden=1;
  59.         delay(1);
  60.         lcden=0;
  61. }
  62. /**************系统初始化***************/
  63. void  init()
  64. {  
  65.         oe=0;
  66.         lcden=0;
  67.         lcdrw=0;
  68.         write_com(0x38);
  69.         write_com(0x0c);
  70.         write_com(0x06);
  71.         write_com(0x01);
  72.         write_com(0x80);
  73.         temp=0;
  74.         TMOD=0x01;
  75.         TH0=(65536-500)/256;
  76.         TL0=(65536-500)%256;
  77.         EA=1;
  78.         ET0=1;
  79.         TR0=1;
  80. }
  81. /**************1602显示函数***************/
  82. void  voltage(uchar  ge,uchar  shi,uchar  bai1)
  83. {  
  84.         shi=temp/1000;
  85.         ge=temp%1000/100;
  86.         shi1=temp%100/10;
  87.         bai1=temp%10;
  88.         write_com(0x80);
  89.         for(num=0;
  90.         num<16;num++)
  91.         {
  92.                 write_data(tab[num]);
  93.         }
  94.         write_com(0xc0);
  95.         for(num=0;num<6;num++)
  96.         {
  97.                 write_data(table1[num]);
  98.         }
  99.         write_com(0xc7);
  100.         write_data(table[shi]);
  101.         delay(1);
  102.         write_com(0xc8);
  103.         write_data(table[ge]);
  104.         delay(1);

  105.         write_com(0xc9);
  106.         write_data('.');
  107.         delay(1);

  108.         write_com(0xca);
  109.         write_data(table[shi1]);
  110.         delay(1);

  111.         write_com(0xcb);
  112.         write_data(table[bai1]);
  113.         delay(1);

  114.         write_com(0xcc);
  115.         for(num=0;num<2;num++)
  116.         {
  117.                 write_data(table2[num]);
  118.         }
  119.         /***********AD转换控制程序**********/     
  120.         start=0;
  121.         start=1;
  122.         start=0;
  123.         while(!eoc);
  124.         oe=1;
  125.         temp=P2;
  126.         oe=0;
  127.         temp=(temp*2*1*98.039216/100);  //AD采样换算
  128.         /*****蜂鸣器报警程序*******/
  129.         /**可燃气体爆炸浓度:5%--16%,本设计设置为5%--15%**/         
  130.         if(temp>=200)
  131.         {           
  132.                 for(count=200;count>0;count--)
  133.                 {  
  134.                         P0_7=~P0_7;
  135.                         dely500();
  136.                 }
  137.                 for(count=200;count>0;count--)
  138.                 {  
  139.                         P0_7=~P0_7;
  140.                         dely500();
  141.                         dely500();
  142.                 }
  143.         }
  144. }
  145. /**************中断***************/
  146. void  timer0()  interrupt  1
  147. {
  148.         TH0=(65536-500)/256;
  149.         TL0=(65536-500)%256;
  150.         CLK=~CLK;  //CLK按位取反,代替方波脉冲
  151. }
  152. void main()
  153. {
  154.         init();
  155.         while(1)
  156.         {
  157.                 voltage(ge,shi,bai1);
  158.         }           
  159. }



复制代码
回复

使用道具 举报

8#
ID:881592 发表于 2021-4-12 22:00 | 只看该作者
angmall 发表于 2021-4-12 16:38
给你改了,对比一下就知道哪里错了。

谢谢您,认真看了您的代码并对比了一下,真的是醍醐灌顶,感谢!
回复

使用道具 举报

9#
ID:311846 发表于 2021-4-14 15:33 | 只看该作者
函数名包含迷之空格
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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