找回密码
 注册
关于网站域名变更的通知
查看: 504|回复: 7
打印 上一主题 下一主题

那位大哥帮我写个51小代码,感谢!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-3-26 11:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
如附件图片功能所述0 \7 V0 p) ~- u+ E$ M

原理图.png (62.21 KB, 下载次数: 4)

原理图

原理图

该用户从未签到

2#
发表于 2024-3-26 14:17 | 只看该作者
这个功能很简单呀

点评

能帮忙写一下吗  详情 回复 发表于 2024-3-26 16:33
可能是我太笨了,写不出来  详情 回复 发表于 2024-3-26 14:30

该用户从未签到

3#
 楼主| 发表于 2024-3-26 14:30 | 只看该作者
ce958www 发表于 2024-3-26 14:17
5 B! y! b7 u* x* _6 R这个功能很简单呀
7 j1 t$ ?$ X7 I; \. c
可能是我太笨了,写不出来
  d7 v2 D6 n  p  F8 J

该用户从未签到

4#
 楼主| 发表于 2024-3-26 16:33 | 只看该作者
ce958www 发表于 2024-3-26 14:17
) N* J4 P4 a. C% a" h7 W这个功能很简单呀

* x, `9 V) K7 T& y7 h$ y: z能帮忙写一下吗' v3 B* @+ r5 Q' f& W, W

该用户从未签到

5#
 楼主| 发表于 2024-3-30 11:02 | 只看该作者
等待好心人

该用户从未签到

6#
发表于 2024-4-11 08:17 | 只看该作者
给你个思路吧,建立一个常数记录按钮按下的次数(记得做个按键防抖),然后写一条指令让这个常数大于4的时候直接归零,然后根据按键常数值转到子程序或者直接用IF指令分配按键次数执行指令,这个程序不难的,如果有思路还写不出来程序的话,兄弟你还是考虑一下是否适合学单片机了

点评

真心有点不适合学  详情 回复 发表于 2024-4-11 11:26

该用户从未签到

7#
 楼主| 发表于 2024-4-11 11:26 | 只看该作者
cyi8 发表于 2024-4-11 08:17( _* C; d9 n' ?0 o0 H
给你个思路吧,建立一个常数记录按钮按下的次数(记得做个按键防抖),然后写一条指令让这个常数大于4的时 ...
/ M! G: ^$ {" Y3 f! [8 B
真心有点不适合学8 Z/ ~9 c# b9 H* |: ?

点评

#include // 包含 STC15F101W 单片机头文件 // 定义引脚 sbit P3_2 = P3^2; sbit P3_3 = P3^3; // 定义模式变量和计时器变量 unsigned char mode = 1; unsigned int timer = 0; // 定义上一次的模  详情 回复 发表于 2024-4-11 11:48

该用户从未签到

8#
 楼主| 发表于 2024-4-11 11:48 | 只看该作者
YJIHXK 发表于 2024-4-11 11:26
! y# \5 X8 x# U真心有点不适合学
$ C. g5 i( {0 Y: D# F& N# O
#include <STC15F101W.h>  // 包含 STC15F101W 单片机头文件0 f4 z, _# F; ~7 k0 J: N

# D* q- X8 _! @0 w+ y% S& C% R) P// 定义引脚: Z5 @! P/ D% t: K% @
sbit P3_2 = P3^2;( r$ i; E( g* p, ], r
sbit P3_3 = P3^3;1 m) C) ?) ]  ?# q* }2 z8 ^
5 J  o, l0 Q. y
// 定义模式变量和计时器变量! E# R" R9 R, \# O, e9 m
unsigned char mode = 1; 7 h: k- W5 e3 l+ n8 F
unsigned int timer = 0; " f' C& `* W! V0 b2 [; @& z

1 Z( V6 P* O0 r* H( F1 x: k& W9 U& L// 定义上一次的模式变量,用于断电记忆
, \8 V" r2 I. S- v9 C4 wunsigned char prevMode = 1;  // 存储上一次的模式, r( r+ a$ X* _1 R! a) Q2 O% }  \1 }

5 n0 Y$ J1 V2 M0 p5 @3 y// 用于存储定时器中断计数
9 I6 o( f$ t4 |6 o) Nunsigned int interruptCount = 0;! E! f$ [: x* t( G8 R7 ?! y
: D: I/ W& R: P* I& t: K9 @
// 定时器中断服务程序% {0 X8 A9 J( k5 F; G; j
void Timer0_ISR() interrupt 1
; G, u6 h) E9 p4 E{
* H+ j' z$ R. Q1 ~# V- ^    switch (mode) {5 }# g" _$ O' D1 Q
        case 1:
2 E* T4 O" ~: L* n0 [            P3_3 = !P3_3;  // 切换 P3.3 的电平9 U# r, x1 g" O5 [
            interruptCount++;  // 中断计数加 1
1 W$ C' `/ t! |! |            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒3 X. K& c8 l( u
                interruptCount = 0;
# v3 p  n3 q% t/ u+ o. u  E                mode = 2;  // 切换到下一个模式8 \% f9 f3 M' b# F2 S: L
            }0 L8 ]: Q  Y' C4 |" E
            break;
% r1 E9 k3 i% N4 v" k# B        case 2:7 n/ e9 x5 _! u" ^9 C& Q
            P3_3 = !P3_3;  // 切换 P3.3 的电平
. |1 x% [& Q% }& _4 S7 j            interruptCount++;  // 中断计数加 1" r6 `$ W' ]+ z+ H; ~+ }; d
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒9 H" _+ r2 B0 ~7 X, W! `
                interruptCount = 0;
: H) X# J' q7 }, S2 b- T                mode = 3;  // 切换到下一个模式
/ D, g2 w2 L1 @            }' `% [0 X( T# n* T+ J. @
            break;
3 {8 x: |( E; o2 \7 B% Z6 I        case 3:
% d: N# Y3 D+ g' x            P3_3 = !P3_3;  // 切换 P3.3 的电平
* P1 p% b: M; s8 W            interruptCount++;  // 中断计数加 1- A/ L2 i) m; p
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
5 Q3 q" [% G4 i; }$ C& n- [                interruptCount = 0;
( p4 d* N$ t# q8 C/ @5 S! ~1 F                mode = 4;  // 切换到下一个模式
. J% Q0 |: z+ u6 O! J9 a            }, [2 L& ]" C" L# Q8 H
            break;2 q- ^: Y; Y3 c! E. a
        case 4:
5 L+ K" N+ T- c/ \            P3_3 = !P3_3;  // 切换 P3.3 的电平5 O2 U( r. B4 l* B
            interruptCount++;  // 中断计数加 1
4 o; {. A1 f; L( z            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
5 I$ k5 B7 Z- k; ~, r* \# s0 z                interruptCount = 0;
7 B: v5 {) U4 T8 {5 \1 {                mode = 5;  // 切换到下一个模式2 d' Z8 O3 v& \0 k0 b( |% l
            }
6 {# H9 K6 A* c# K, Y7 {  ~; J            break;8 G) C2 C1 V  W5 V- u
        case 5:
& M, o! W8 G8 r) v            P3_3 = !P3_3;  // 切换 P3.3 的电平0 E. ~, _6 z) C3 P) _9 Z
            interruptCount++;  // 中断计数加 1
' }! d) }" Q; J6 ~2 P5 w/ x0 E% w            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒7 r! J7 Y/ ]* n9 H' x- e
                interruptCount = 0;
# C) D& t' p9 ?9 P                mode = 6;  // 切换到下一个模式8 N' w' s3 J% B. b
            }
4 Z, L* S" ~( J8 ]: Y! G" `0 t            break;8 m4 m8 a. D+ F  M& Q( K) S/ y
        case 6:
) y4 g' I, ]5 R, p1 L2 }1 e$ {            P3_3 = !P3_3;  // 切换 P3.3 的电平
0 B2 [/ t* ^" U) L6 J; j            interruptCount++;  // 中断计数加 1
) y8 M- |. `1 p0 _2 l/ D% X) ^( Z            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒, Q+ @! c9 i- s" h
                interruptCount = 0; + s' b; P' b! f( D- Z1 {
                mode = 1;  // 切换到第一个模式,开始新的循环
7 _7 w( E$ }" ~6 {            }
( N  g+ |( c1 k' t- c            break;' ?8 d6 L- k& I: }9 I8 z
    }* ^' [+ ?/ F4 s' k- t6 `8 x
}4 J0 ~( j$ c% w1 W' Z$ F

. B: [9 w! F6 x// 初始化定时器
( k" P- P* U) `- I, k4 }3 H: \. zvoid Init_Timer0()
( r/ y" |$ U6 o& _{
2 n  T3 T$ |: O6 F& l0 T    TMOD = 0x01;  // 设置定时器 0 为工作模式 19 _0 h! V' Z7 y
    TH0 = (65536 - 50) / 256;  // 设置定时器初值
+ [3 |* S$ p: ]. o% T5 w' Q    TL0 = (65536 - 50) % 256;  // 设置定时器初值9 Z) p; F3 s4 g' H3 l* g
    ET0 = 1;  // 使能定时器 0 中断
& V4 j. T* L0 P1 U! G8 d% U! g    TR0 = 1;  // 启动定时器 0
1 H/ J2 n# b- s  G* h; O" N}
2 X( S$ }/ z% W% n1 N( n- w% }- v0 q
// 主程序
; [/ A- N7 d& d' [void main()6 F, R& f, B) G: Q0 R4 z3 y+ y
{3 ?: G  L1 [' ^/ N8 I8 J
    // 初始化引脚和定时器
, h: G4 t0 G7 v9 `+ P+ u- N/ I    P3M0 = 0x00;
" e+ L$ E- d) X6 `# @/ W0 g* Q    P3M1 = 0x00;
) R9 T: |" ]6 P" x+ |5 n) _. }    Init_Timer0();
7 [2 j9 P+ P( _, z- q
9 E0 R, S5 x3 c8 {  t- H    // 上电默认模式 1" C% |, N1 W6 _$ ~8 C# X& U: J8 b
    mode = 1; ) S1 }5 ~# |5 P# Y: |1 E* x. s

9 V8 ?! R2 o! M# |4 g    // 开启总中断
0 V- e& F' g0 t( e9 J    EA = 1; ) p4 H9 D  n0 Q4 q- o

$ Z3 v* _2 `! k1 V+ h! Q7 R    while (1) {
, S: Z6 v% c, h5 _        if (P3_2 == 0) {  // 检测 P3.2 按键按下
/ C, I4 |& d! n            mode++;  // 切换模式$ \+ J$ X* A: M9 F2 r
            if (mode > 6) {
" l+ }1 d6 k) j1 M7 ]                mode = 1;  // 超出模式范围时,回到模式 1
; h7 \4 X4 I  o            }
: ]/ A' ~+ E0 u: V' P            prevMode = mode;  // 更新上一次的模式
. z/ I& U% m2 f- i        }- l; C+ g" Q( g! g9 O, d) C
    }4 U5 K4 Q, O' h; Q( c
}: n' ?1 l- @# K) _8 @# I
! m& M8 v: w- F$ o$ j% g( g
求指点,编译出错!
5 G  W) M) H- q9 q- {
( K  e5 ?9 [/ Q: h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-5 05:10 , Processed in 0.187500 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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