找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序问题 请问,这样的表达有没有问题?

[复制链接]
跳转到指定楼层
楼主
各位大神,这样的描述对不对,总感觉怪怪的,感谢指点一下.
  1. #inclde"STC8GXXXX.H"

  2.   sbit P1^1=LED;  灯具
  3.         sbit P1^2=SW;   开关
  4.         
  5. void main()
  6. {
  7.     P0M0 = 0x00; P0M1 = 0x00;
  8.     P1M0 = 0x00; P1M1 = 0x00;
  9.     P2M0 = 0x00; P2M1 = 0x00;
  10.     P3M0 = 0x00; P3M1 = 0x00;
  11.     P4M0 = 0x00; P4M1 = 0x00;
  12.     P5M0 = 0x00; P5M1 = 0x00;
  13.     P6M0 = 0x00; P6M1 = 0x00;
  14.     P7M0 = 0x00; P7M1 = 0x00;

  15.         
  16.         
  17.     while (1)
  18.     {
  19.         if (LED == 0xff)  // 灯亮时,开关关闭
  20.         {
  21.             SW = 0x00;   // 设置P5口输出为高电平
  22.         }
  23.         else
  24.         {
  25.            LED = 0x00;     // 灯不亮
  26.                                          SW =0xff;      //  开关开启
  27.         }
  28.                         
  29.                                 。。。。。
  30.                                 
  31.                 switch(num)
  32.                         {
  33.                                         case 1:SW=~SW;LED=~LED;break;
  34.                                         case 2:;break;
  35.                                         case 3:;break;
  36.                                         case 4:;break;
  37.                                         case 5:;break;
  38.     }
  39. }
复制代码



复制代码


1.png (21.51 KB, 下载次数: 45)

1.png

1709292043548.jpg (3.81 MB, 下载次数: 47)

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

使用道具 举报

沙发
ID:277550 发表于 2024-3-1 23:37 | 只看该作者
#inclde"STC8GXXXX.H"

sbit LED = P1^1;        //灯具
sbit SW  = P1^2;        //开关
   
void main(){
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;

      
      
    while (1){
        if(LED == 1){        // 灯亮时,开关关闭
            SW = 0;                // 设置P5口输出为高电平
        }else{
           LED = 1;                // 灯不亮
                        SW = 1;                // 开关开启
        }
                // 。。。。。。。
                switch(num){
                        case 1:SW=~SW;LED=~LED;break;
                        case 2:;break;
                        case 3:;break;
                        case 4:;break;
                        case 5:;break;
                }
    }
}
回复

使用道具 举报

板凳
ID:1109793 发表于 2024-3-2 07:17 | 只看该作者
devcang 发表于 2024-3-1 23:37
#inclde"STC8GXXXX.H"

sbit LED = P1^1;        //灯具

~也不是位操作,我还没试过用在位操作会怎样
回复

使用道具 举报

地板
ID:342822 发表于 2024-3-2 10:52 | 只看该作者
文心一言人工智能对你的问题回复:
从你给出的代码片段来看,存在几个问题。以下是对这些问题的解释和修正建议:

头文件包含错误:

c
#inclde"STC8GXXXX.H"
这一行应该是:

c
#include "STC8GXXXX.H"
sbit定义错误:

c
sbit P1^1=LED;  灯具  
sbit P1^2=SW;   开关
sbit的定义方式可能不正确。通常,sbit`是用来定义单片机某个位地址上的单个位的,但具体定义方式依赖于你使用的单片机库。正确的定义方式可能类似于:

c
sbit LED = P1^1;  // 定义P1.1为LED  
sbit SW = P1^2;   // 定义P1.2为SW
在main函数中定义变量:
在main函数中,你使用了num这个变量,但没有定义它。你需要在使用之前定义它,例如:

c
unsigned char num = 0;
逻辑错误:
在while(1)循环中,你检查了LED的值,但LED是一个sbit,它应该是一个位地址,不应该直接与0xff比较。你可能是想检查P1的某个位来确定LED的状态。
switch语句中未使用的变量:
在switch语句中,你使用了num变量,但在while(1)循环中并没有修改它的值,这可能导致switch语句中的代码永远不会被执行。
逻辑混乱:
在while(1)循环中,你先检查了LED的状态,然后又设置了LED和SW的值。这种逻辑可能不是你想要的。
基于上述分析,以下是一个修改后的代码示例:

c
#include "STC8GXXXX.H"  
  
sbit LED = P1^1;  // 定义P1.1为LED  
sbit SW = P1^2;   // 定义P1.2为SW  
  
void main()  
{  
    P0M0 = 0x00; P0M1 = 0x00;  
    P1M0 = 0x00; P1M1 = 0x00;  
    P2M0 = 0x00; P2M1 = 0x00;  
    P3M0 = 0x00; P3M1 = 0x00;  
    P4M0 = 0x00; P4M1 = 0x00;  
    P5M0 = 0x00; P5M1 = 0x00;  
    P6M0 = 0x00; P6M1 = 0x00;  
    P7M0 = 0x00; P7M1 = 0x00;  
  
    unsigned char num = 0; // 定义并初始化num变量  
  
    while (1)  
    {  
        if (SW == 0)  // 假设SW为0时表示开关关闭,LED亮  
        {  
            LED = 1;   // 设置LED亮  
        }  
        else  
        {  
            LED = 0;   // 设置LED灭  
        }  
  
        // 根据num的值执行相应的操作  
        switch(num)  
        {  
            case 1:  
                SW = ~SW; // 切换SW的状态  
                LED = ~LED; // 切换LED的状态  
                break;  
            // 其他case可以根据需要添加  
            default:  
                break;  
        }  
  
        // 可以根据需要修改num的值,例如:  
        // num = (num + 1) % 6; // 使num在1到5之间循环  
    }  
}
请注意,上述代码只是一个示例,你可能需要根据你的具体硬件和需求进行修改。
回复

使用道具 举报

5#
ID:1110945 发表于 2024-3-2 11:09 | 只看该作者
波浪号“~”是按位取反,无论是1位,8位,还是32位,运算后每一位都会变成
和之前相反的数字,之前是1就会变成0,之前是0就会变成1。
回复

使用道具 举报

6#
ID:34149 发表于 2024-3-2 13:40 | 只看该作者
文心一言这么厉害吗?
看不出来有什么漏洞。
如何使用这个用这个超级智能的工具呢 ?
好想让她帮我写代码
回复

使用道具 举报

7#
ID:883242 发表于 2024-3-2 15:34 | 只看该作者
为什么不编译一下呢?
回复

使用道具 举报

8#
ID:1102070 发表于 2024-3-6 12:49 来自手机 | 只看该作者
这样表达也是可以的。反过来一般情况下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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