找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1885|回复: 9
收起左侧

单片机控制3开关,没开关控制3led,分别按下循环点亮

[复制链接]
ID:28752 发表于 2021-10-12 15:34 | 显示全部楼层 |阅读模式
新手,先做个功能,3个按键,每个按键分别控制3个灯循环点亮,使用STC15F204EA,在网上找的程序片段拼的,但是编译不过,好多错误,麻烦大神帮我看看,我到底错在哪了,谢谢...
#include <STC15X.h>
sbit key1 = P3^7;//定义按键端口
sbit key2 = P3^6;//定义按键端口
sbit key3 = P3^5;//定义按键端口
sbit led1 = P1^7;//定义LED1端口
sbit led2 = P1^6;//定义LED1端口
sbit led3 = P1^5;//定义LED1端口
sbit led4 = P1^4;//定义LED1端口
sbit led5 = P1^3;//定义LED1端口
sbit led6 = P1^2;//定义LED1端口
sbit led7 = P1^1;//定义LED1端口
sbit led8 = P1^0;//定义LED1端口
sbit led9 = P2^7;//定义LED1端口
/******************delay**********************/
void delay()
{
unsigned int i, j;
for(i = 0; i < 100; i++) for(j = 0; j < 500; j++);
}

/******************按键识别***********************/
void readkey(void)
{
unsigned char i, j;
if(!key1) {
for(i = 0; i < 10; i++)
for(j = 0; j < 120; j++); //????
while(!key1); //??????
aa++;
aa %= 3; //n1 = 0~2
}
        if(!key2) {
for(i = 0; i < 10; i++)
for(j = 0; j < 120; j++); //????
while(!key2); //??????
bb++;
bb %= 3; //n2 = 0~2
}
if(!key3) {
for(i = 0; i < 10; i++)
for(j = 0; j < 120; j++); //????
while(!key3); //??????
cc++;
cc %= 3; //n3 = 0~2
}
}
}
/******************主函数***********************/
void main()
{
while(1)
{
switch(aa) {
case 0: led1 = 1;led2 = 0;led3 = 0; readkey();  //??
case 1: led1 = 0;led2 = 1;led3 = 0; readkey();  //??
case 2: led1 = 0;led2 = 0;led3 = 1; readkey();  //??
}
switch(bb) {
case 0: led4 = 1;led5 = 0;led6 = 0; readkey(); //??
case 1: led4 = 0;led5 = 1;led6 = 0; readkey(); //??
case 2: led4 = 0;led5 = 0;led6 = 1; readkey(); //??
}
switch(cc) {
case 0: led7 = 1;led8 = 0;led9 = 0; readkey(); //??
case 1: led7 = 0;led8 = 1;led9 = 0; readkey(); //??
case 2: led7 = 0;led8 = 0;led9 = 1; readkey(); //??
}
}
}


000.jpg
回复

使用道具 举报

ID:831736 发表于 2021-10-12 17:58 | 显示全部楼层
47行多了一个括号,然后你的aa,bb,cc,没有声明,还有你的头文件(#include<STC15X.h>)也有问题,我没有用过这个单片机,不知道改加什么头文件好。
回复

使用道具 举报

ID:624769 发表于 2021-10-12 18:53 | 显示全部楼层
找不到头文件,用不了P3, 所以错误一大堆。
STC15F204E 的头文件, 和 STC15F104E 是通用的,和其他STC15系列略有不同,你要是找不到可以用这个。
STC15F104E.rar (1.87 KB, 下载次数: 5)
回复

使用道具 举报

ID:959346 发表于 2021-10-12 22:45 | 显示全部楼层
找不到你包含的头文件,所以预定义的寄存器名称也都会报错。
回复

使用道具 举报

ID:161164 发表于 2021-10-13 00:15 | 显示全部楼层
switch内要加break;分开每个case
不加就会后面那几个case都走一遍
回复

使用道具 举报

ID:28752 发表于 2021-10-13 09:45 | 显示全部楼层
谢谢各位大佬回复,反反复复的查...总算是能编译过了...,以前一直在弄硬件...,看来...学习的路还很长...
回复

使用道具 举报

ID:28752 发表于 2021-10-13 09:46 | 显示全部楼层
188610329 发表于 2021-10-12 18:53
找不到头文件,用不了P3, 所以错误一大堆。
STC15F204E 的头文件, 和 STC15F104E 是通用的,和其他STC15 ...

是找不到头文件,我换成c51的就好了
回复

使用道具 举报

ID:28752 发表于 2021-10-13 09:51 | 显示全部楼层
以下代码能编译过,各位大佬帮看看能不能实现功能,开发板在路上,3按键分别,控制3组12个led,按下开关,对应的LED顺序点亮,再按下,关闭...
  1. #include "reg51.h"
  2. sbit key1 = P3^7;  //定义按键端口
  3. sbit key2 = P3^6;  //定义按键端口
  4. sbit key3 = P3^5;  //定义按键端口
  5. sbit led1 = P1^7;  //定义LED端口
  6. sbit led2 = P1^6;  //定义LED端口
  7. sbit led3 = P1^5;  //定义LED端口
  8. sbit led4 = P1^4;  //定义LED端口
  9. sbit led5 = P1^3;  //定义LED端口
  10. sbit led6 = P1^2;  //定义LED端口
  11. sbit led7 = P1^1;  //定义LED端口
  12. sbit led8 = P1^0;  //定义LED端口
  13. sbit led9 = P2^7;  //定义LED端口
  14. sbit led10 = P2^6; //定义LED端口
  15. sbit led11 = P2^5; //定义LED端口
  16. sbit led12 = P2^4; //定义LED端口
  17. unsigned char a, b, c;
  18. /******************delay**********************/
  19. void delay(unsigned char i)

  20. {
  21.    
  22. unsigned char m, n;
  23.    
  24. for (m = i; m>0; m--)
  25.    
  26. for (n = 125; n>0; n--);

  27. }
  28. /******************按键识别***********************/
  29. void readkey(void)
  30. {
  31. if(!key1) {
  32. delay(10);
  33. if(!key1) {
  34. while(!key1); //??????
  35. a++;
  36. a %= 2; //n = 0~1
  37. }
  38. }
  39. if(!key2) {
  40. delay(10);
  41. if(!key2) {
  42. while(!key2); //??????
  43. b++;
  44. b %= 2; //n = 0~3
  45. }
  46. }
  47. if(!key3) {
  48. delay(10);
  49. if(!key3) {
  50. while(!key3); //??????
  51. c++;
  52. c %= 2; //n = 0~3
  53. }
  54. }
  55. }
  56. /******************主函数***********************/
  57. void main()
  58. {
  59. while(1)
  60. {
  61. readkey();
  62. switch(a) {
  63. case 0: led1 = 1;delay(200);led2 = 1;delay(200);led3 = 1;delay(200);led4 = 1; break;
  64. case 1: led1 = 0;led2 = 1;led3 = 0;led4 = 0 ; break;   
  65. }
  66. switch(b) {
  67. case 0: led5 = 1;delay(200);led6 = 1;delay(200);led7 = 1;delay(200);led8 = 1;break;  
  68. case 1: led5 = 0;led6 = 0;led7 = 0;led8 = 0 ; break;   
  69. }
  70. switch(c) {
  71. case 0: led9 = 1;delay(200);led10 = 1;delay(200);led11 = 1;delay(200);led12 = 1;break;  
  72. case 1: led9 = 0;led10 = 1;led11 = 0;led12 = 0 ; break;   
  73. }
  74. }
  75. }
复制代码


回复

使用道具 举报

ID:624769 发表于 2021-10-13 10:47 | 显示全部楼层
grb7906 发表于 2021-10-13 09:46
是找不到头文件,我换成c51的就好了

STC15F204E最好不要用 C51头文件,寄存器变化还是比较大的。很可能会出现,编译通过,烧录后确莫名其妙的功能不正常。
回复

使用道具 举报

ID:28752 发表于 2021-10-13 14:30 | 显示全部楼层
188610329 发表于 2021-10-13 10:47
STC15F204E最好不要用 C51头文件,寄存器变化还是比较大的。很可能会出现,编译通过,烧录后确莫名其妙的 ...

明白,谢谢提醒...
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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