SASS基础

1、变量

常规变量

用!global将局部变量变成全局变量

//全局变量
$a-color:blue;//全局变量
.box{
    color: $a-color
}


//局部变量
.child{
    $a-color: red;//局部变量
    color: $a-color
}


//将局部变量变成全局变量
.box2{
    $c-color:yellow !global;
}

.box3{
    color: $c-color
}
//全局变量
$a-color:blue;//全局变量
.box{
    color: $a-color
}


//局部变量
.child{
    $a-color: red;//局部变量
    color: $a-color
}


//将局部变量变成全局变量
.box2{
    $c-color:yellow !global;
}

.box3{
    color: $c-color
}

特殊变量

当变量是css属性的一部分,或者变量是css属性的时候,必须要遵循 #{变量名}的格式

//注意,当是css属性,或者是css属性的一部分,请必须遵循
//#{$变量名}格式

//当是css属性的一部分
$side:top;
.box{
    border-#{$side}:1px solid #ccc; 
}

//当是css属性的时候
$bordertop:border-top;
.box2{
 margin-#{$side}: 12px;
 #{$bordertop}:18px solid #ccc
}

在这里插入图片描述

2、 嵌套

常规嵌套

//嵌套,将子选择器的样式,嵌套在父选择器的样式中
ul{
    font-size: 12px;
    li{
        color: yellowgreen;
        a{
            text-align: center
        }
    }
}

在这里插入图片描述

嵌套中的父级选择器 &

//嵌套,在子选择器中,有时候我们需要使用父元素的选择器,用&符号
ul{
    li{
        float:left;
    }
    &::after{
        content: "";
        display: block;
        clear: both;
    }
}

嵌套,跳出选择器嵌套

//用@at-root跳出选择器
div{
    width: 100px; 
    height: 100px;
    background: red;
    position: relative;
    animation:mymove 5s infinite;
    @at-root{
        @+ mymove {
            from{left: 0px;}
            to{left: 200px;}
        }
    }
}

在这里插入图片描述

3、运算

.box{
     height: 10px + 20px;//加
     width:40px-10;//减
     margin-left: 10px * 2;//乘
     padding-left: (75rem/10);//除法要加上括号
     font-family: 'Courier'+' New';//字符串的加
     position: relative;
     top: 1em+(2em-1em);//带括号运算
}

在这里插入图片描述

4、条件语句

//条件语句
$string:just-test;
$flag:null;
body{
    @if($string==just){
        color: red
    }
    @else if($string==test){
        color:yellow
    }
    @else{
       color:blueviolet
    } 
}

在这里插入图片描述

5、循环语句

@for 变量 from 包含end 变量从start到end
@for 变量 to 不包含end 变量从start到end(不包括end)

@for $i from 1 through 3 {
    .item-#{$i} { width: 2em * $i; }
}

@for $test from 1 to 3{
    .new#{$test}-test{
        color: yellow
    }
}

在这里插入图片描述
@for 变量 in 变量依次遍历 list集合

@each $var in one,two,there{
   .#{$var}-icon{
    background:url(image/#{$var}.png);
   }
}

在这里插入图片描述

6、混合Mixin

不带参数的Mixin(把mixin看做是function更容易理解)

@mixin win {
    position:fixed;
    top: 0px;
    right: 0px;
    bottom: 0px;
    left: 0px;
    z-index: 1;
    background:rgba(0, 0, 0, .5)
}

.box{
    @include win()
}

在这里插入图片描述
带参数的Mixin

@mixin font($size){
   font-size: $size+px;
   color: blue
}

.box{
    @include font(15)
}

在这里插入图片描述

7、函数指令

自定义函数,@function @return

//自定义函数
@function box-width($param){    
    @return $param/10+rem;
}

.box{ width: box-width(750)}

在这里插入图片描述

继承

让一个选择器,继承另一个选择器的所有样式

//继承,直接在@extend的后面加上选择器的名称
h1{
    background: #ccc;
    font-size: 15px;
    width: 50px;
}

.box{ @extend h1}

在这里插入图片描述

继承(占位选择器%)

当我们在开发项目的时候,我们可能预设了很多样式,有些我们使用了,有些我们可能都没有用到,但是那些没有用到的样式,我们不想在css中解析出来,这时我们可以用站位选择器去预设我们需要的样式,当需要使用的时候直接@extend用就可以了。

//占位选择器
%red{
    border: 1px solid red;
    color: red;
    background: red;
}

.box{
    @extend %red
}

在这里插入图片描述

8、导入

当我们在拿到一份设计稿的时候,我们一般会想到将页面拆分成多个模块,比如头部,中间部分,尾部。在sass中,我们可以实现css的模块化编码,这时,我们只需要将多个模块统一用@import的方式引入到主模块中即可。
_head.scss

header{background: red}

_main.scss

main{background:blue}

_foot.scss

footer{ background: green}

style.scss

//引入各模块
@import "_head";
@import "_main";
@import "_foot";
.myself{ background: #ccc}

在这里插入图片描述

扩展

在vscode中装插件。Live Sass Compiler。将Sass转成css
在这里插入图片描述

<think>嗯,用户的问题是关于如何在STM32上配置或仿真PCF8751芯片的教程或方案,特别是使用STM32CubeMXProteus。首先,我需要确认PCF8751的型号是否正确,因为根据提供的引用,用户可能指的是PCF8574、PCF8575、PCF8591或PCF8563,但PCF8751这个型号在引用中没有提到。这可能是一个拼写错误或者用户记错了型号。因此,首先需要建议用户确认型号,并假设可能的正确型号,如PCF8574或PCF8575。 接下来,假设用户确实是指PCF8574或类似的I2C扩展芯片,我需要从引用中找到相关的配置信息。引用[1]提到PCF8574是8路I/O扩展,引用[4]提到PCF8575是16路,两者都是I2C接口。所以,基于这些信息,可以推断出配置步骤可能类似。 用户需要使用STM32CubeMX进行配置,然后进行Proteus仿真。首先,在STM32CubeMX中配置I2C外设,设置正确的引脚,比如I2C1的SCL和SDA,并生成代码。然后,在代码中使用HAL库函数进行I2C通信,比如发送数据到PCF8574的地址,或者读取输入状态。 在Proteus中,需要添加PCF8574元件,连接I2C线路,并配置正确的从机地址。根据引用[1],可能需要设置A0、A1、A2地址引脚来确定I2C地址。例如,如果地址引脚都接地,地址可能是0x20。 另外,用户可能需要了解如何编写代码,包括初始化I2C、发送和接收数据。需要注意HAL库的函数调用,比如HAL_I2C_Master_Transmit和HAL_I2C_Master_Receive,以及处理可能的错误。 同时,仿真时可能需要使用虚拟终端或逻辑分析仪来监控I2C通信,确保数据正确传输。引用中的示例使用了FreeRTOS,所以如果用户的项目涉及实时操作系统,也需要在CubeMX中配置FreeRTOS,并确保任务调度正确。 最后,需要提醒用户注意硬件连接的正确性,比如上拉电阻是否添加,I2C总线的速度设置是否匹配,以及地址是否正确。如果用户遇到问题,建议检查这些方面,并参考提供的引用资源中的详细步骤。</think>### STM32CubeMXProteus中PCF8751配置及仿真方法 #### 问题分析 根据引用内容,PCF8751可能是输入/输出扩展芯片的笔误,实际可能是以下I²C接口芯片之一: - **PCF8574**(8位I/O扩展,引用[1][^1]) - **PCF8575**(16位I/O扩展,引用[4][^4]) - **PCF8591**(8位ADC/DAC,引用[2][^2]) 以下以**PCF8574(8位I/O扩展)**为例说明配置流程。 --- ### 一、STM32CubeMX配置步骤 1. **创建工程** - 选择STM32F103C8T6芯片,启用外部高速时钟(HSE) - 配置RCC为Crystal/Ceramic Resonator 2. **I2C外设配置** - 启用I2C1模式为**I2C** - 配置SCL/SDA引脚(如PB6/PB7) - 参数设置: ```c Timing: Standard Mode (100 kHz) Own Address: 0x00 (主机模式无需地址) ``` 3. **FreeRTOS集成(可选)** - 在Middleware中启用FREERTOS - 创建I2C读写任务(建议优先级为`osPriorityNormal`) 4. **生成代码** - Toolchain选择MDK-ARM或SW4STM32 - 勾选生成外设初始化代码 --- ### 二、代码开发(Keil/STM32IDE) ```c // 定义PCF8574地址(A0-A2接地时地址为0x20) #define PCF8574_ADDR 0x20 << 1 // I2C地址需左移1位 // 发送8位数据到PCF8574 HAL_I2C_Master_Transmit(&hi2c1, PCF8574_ADDR, &data, 1, HAL_MAX_DELAY); // 从PCF8574读取输入状态 uint8_t input_data; HAL_I2C_Master_Receive(&hi2c1, PCF8574_ADDR, &input_data, 1, HAL_MAX_DELAY); ``` --- ### 三、Proteus仿真设置 1. **元件添加** - 搜索添加`STM32F103C8`、`PCF8574`、`I2C DEBUGGER` - 连接电路: ``` STM32 PB6 -> PCF8574 SCL STM32 PB7 -> PCF8574 SDA PCF8574 A0-A2接地(地址0x20) ``` 2. **固件加载** - 右键STM32芯片,加载生成的`.hex`文件 - 设置晶振频率为8MHz(与CubeMX配置一致) 3. **调试监控** - 添加I2C Debugger监控总线数据 - 使用虚拟终端观察调试输出(需代码中启用UART) --- ### 四、关键注意事项 1. **地址冲突**:若总线上有多个I²C设备,需通过A0-A2引脚设置不同地址[^4] 2. **上拉电阻**:SCL/SDA线需接4.7kΩ上拉电阻(Proteus中可省略,实物必须添加) 3. **时序匹配**:CubeMX中I2C时序配置需与Proteus模型参数一致 4. **电平兼容**:PCF8574工作电压范围2.5-6V,需与STM32电平匹配[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值