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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
如附件图片功能所述. C' g3 F5 a% z& r+ _) _: m) d

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

原理图

原理图

该用户从未签到

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
1 {  Z$ f; Z( F. x0 ~9 Z0 J这个功能很简单呀
' h: W4 g3 K/ }
可能是我太笨了,写不出来
# B$ H2 m; k+ l  @! W3 Y# c! g, ?# Z

该用户从未签到

4#
 楼主| 发表于 2024-3-26 16:33 | 只看该作者
ce958www 发表于 2024-3-26 14:173 T* O$ I; r- F) E' J- O6 V4 S6 U
这个功能很简单呀

1 Z% a5 ]2 e$ p! m) ?- V能帮忙写一下吗: I' v5 n, s5 _0 d7 K

该用户从未签到

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
2 A0 x2 p$ ?4 a+ L" S, y给你个思路吧,建立一个常数记录按钮按下的次数(记得做个按键防抖),然后写一条指令让这个常数大于4的时 ...
7 Q) W5 F3 M; B% ]0 g3 Y
真心有点不适合学8 w0 `; @) a6 N; C" m

点评

#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
1 X, |0 A; \  f真心有点不适合学

8 O3 I4 C9 L$ F% l#include <STC15F101W.h>  // 包含 STC15F101W 单片机头文件- C3 L# P/ x, v  Y$ E) m

' N' u) k# ^0 n// 定义引脚
& B' g! P7 b- ?sbit P3_2 = P3^2;# q/ k0 ^( y8 S0 `" H3 H
sbit P3_3 = P3^3;
( K- T3 P( w, m9 ~+ m( C! x  {2 \" E4 S1 |3 Y0 m3 j6 _- @/ B3 y
// 定义模式变量和计时器变量  V# ?8 c  D) m
unsigned char mode = 1;
  u- ?$ i# l, `/ Q' G/ Xunsigned int timer = 0;
9 p" ~4 G2 g( o+ E
2 y& T, [; r8 b$ l1 P// 定义上一次的模式变量,用于断电记忆7 T  I# B- a5 f5 D
unsigned char prevMode = 1;  // 存储上一次的模式
. N7 p  N- q% m: c( a$ ^- u4 _) I$ I- ~
// 用于存储定时器中断计数
$ V) `& c( J% d! |/ n) u% \3 c/ \unsigned int interruptCount = 0;
9 \9 D( y) w3 n7 U, h
5 W9 `" [+ N, V2 m// 定时器中断服务程序
) U: \5 X2 a2 ^3 ivoid Timer0_ISR() interrupt 1
1 L0 C( G/ F4 F{
/ m& Y4 S. y7 h& g* B* T    switch (mode) {9 _% e7 @6 ?" Z. ?! D
        case 1:
' T/ B) _2 S0 f7 \            P3_3 = !P3_3;  // 切换 P3.3 的电平; [4 c( `8 }: K6 j) n; b! j; l
            interruptCount++;  // 中断计数加 1& y& j# u! i% U  A. I) O
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒$ G, M! f  J1 I, H  y1 J
                interruptCount = 0;
0 j9 X) a  U- q# j$ z  q                mode = 2;  // 切换到下一个模式
1 Q3 y7 o. r3 M& C  T% b- n7 [            }
. V6 _$ G* y; G+ G2 F' W            break;5 c  f5 J6 [; Y/ D0 k
        case 2:5 F% j6 `* {6 [* F, W
            P3_3 = !P3_3;  // 切换 P3.3 的电平. \$ G* E! V- r) `1 A
            interruptCount++;  // 中断计数加 1) g9 c& [8 O" e9 J) [$ @) W
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
- G7 C& C1 o5 L+ n                interruptCount = 0;
0 O- K5 a+ V" K; M' f                mode = 3;  // 切换到下一个模式8 d! p& c. j* v# H( h& o5 Y
            }
2 F1 L! r$ m% W2 F+ U  @            break;# o  g5 M  {3 z. l, E  N( u
        case 3:
+ e' W  n2 G! [7 w            P3_3 = !P3_3;  // 切换 P3.3 的电平
4 {2 U2 \9 i7 P2 K            interruptCount++;  // 中断计数加 18 U' a- ^( q! E+ K: |: Z! E) e
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
2 B1 Z6 m! U/ K                interruptCount = 0;
  ^) f/ a- o( `6 X! @* x/ ~, H                mode = 4;  // 切换到下一个模式7 @9 ?3 j  y" O* q9 {
            }
9 p* F+ X9 x, f! \5 Y( p9 i            break;+ q0 j0 \# c. J7 p4 Y" k" `, q
        case 4:$ b. t; V$ M# x# D1 Z1 J8 R
            P3_3 = !P3_3;  // 切换 P3.3 的电平
+ z4 `# ^; U% p; w- N* |            interruptCount++;  // 中断计数加 1  I% R/ W8 f7 X# M4 _( a8 P. ^
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
( i7 T/ {. h1 V' M                interruptCount = 0;
8 F  m+ }( c+ \  [                mode = 5;  // 切换到下一个模式
9 l! P7 I1 U- y$ n: T            }
( A% C9 n& t0 t1 d* R& A            break;
5 d5 a# Y$ X6 q' P" R0 l6 C7 S, F        case 5:9 M3 L$ [+ p4 p! i9 w% H- b# d
            P3_3 = !P3_3;  // 切换 P3.3 的电平9 ^- z7 y- W2 S8 j% L2 O4 M
            interruptCount++;  // 中断计数加 1
9 J4 \) e% s- n, w0 p9 m% ]% w* M            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
. _6 {/ \" Z% M' w. O) H: B                interruptCount = 0; ; a( B% e8 L5 g% Q: m( |8 b" i
                mode = 6;  // 切换到下一个模式
8 k* o. B8 j% W0 }            }" ^- n; Q9 Q' L& q" @
            break;
. W- p  c" f* d  ]        case 6:" z5 n5 h* o6 @
            P3_3 = !P3_3;  // 切换 P3.3 的电平3 T2 S; q* o! P+ i. V7 h! N
            interruptCount++;  // 中断计数加 1+ h  s2 ^& U9 w# I+ l& B
            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒  ?5 j+ D# |5 h& D6 U$ m& n/ E) Y
                interruptCount = 0;
+ f  p1 e- E7 g  I' {8 G" x8 g                mode = 1;  // 切换到第一个模式,开始新的循环" \6 E' X2 \7 G1 W
            }
) @% Q# B8 y1 t8 x            break;2 d% U: i8 {; v4 y$ n3 T4 }6 |
    }: _3 ]4 }( m1 ]
}
' Y! t- G2 p0 Q, g+ o9 f/ O4 H7 p0 ]1 ]5 g7 ~* T$ C- N+ A$ ], n
// 初始化定时器7 |0 C! B# @0 p1 ^+ [+ B
void Init_Timer0()
: A( H; X! D- b( o( x{
0 T) o7 @8 U* J4 k- T4 u    TMOD = 0x01;  // 设置定时器 0 为工作模式 1* R3 d9 |1 j: M* W
    TH0 = (65536 - 50) / 256;  // 设置定时器初值% h! n7 u% A" ?; l" Y7 b$ y
    TL0 = (65536 - 50) % 256;  // 设置定时器初值
5 p7 q2 r5 S- f7 j    ET0 = 1;  // 使能定时器 0 中断
# J2 p6 I- d7 [+ Q" X0 T2 W' l! k    TR0 = 1;  // 启动定时器 05 n3 \8 b9 `" O; O
}9 ^- D( Z* y" o' D

. V( ~/ S0 x. a4 }+ }! e5 h$ H// 主程序' @" }, K* ^& w) [3 `  {, r0 U$ e: B' c
void main()3 G% L/ c0 Y, h, Q) o8 y" [1 Z, B
{% O; J. Q5 t6 x2 U
    // 初始化引脚和定时器  y( v. M! B6 z5 v, C% n# H( w
    P3M0 = 0x00;
7 n  ?( I8 a8 n# F0 B; i7 W    P3M1 = 0x00; / {1 @) A/ H. n- q) \
    Init_Timer0(); " P* s) A. a5 M

9 H5 Z8 c  ]- N2 A8 z    // 上电默认模式 1+ S! ^5 X( z- e2 H! N
    mode = 1; ' k8 ?; f, U, y5 g# b# ?+ W
. r0 E6 |5 u& n4 O5 P
    // 开启总中断
# r( O  f6 o5 @, k8 B2 ^; m, C    EA = 1;
9 N9 }6 P4 }% s, ^/ u! I& n
9 l2 d( q0 r% Y7 V/ L    while (1) {2 t1 t0 K' ^3 @# f
        if (P3_2 == 0) {  // 检测 P3.2 按键按下
4 C4 W" H* B$ L5 W3 y2 D            mode++;  // 切换模式5 s6 }4 f+ p9 N; Y. }8 C9 j( N
            if (mode > 6) {
) i2 p" k. p* u- @$ R2 f! ~                mode = 1;  // 超出模式范围时,回到模式 1
$ g$ z& o' X) {: r1 [3 m            }/ }% D: r( q. j' S) ]6 j/ R% C
            prevMode = mode;  // 更新上一次的模式
$ [8 h; |' O: ]8 K: p2 S        }
5 ^. B9 d$ W7 C& e5 `! {, K6 N* U    }5 _9 h3 j- N8 w; ]8 c5 M
}
' H, H1 a  ~% M# A" c8 a* E
( H# E, X3 p& D% e/ F/ R8 I2 S求指点,编译出错!. h* c1 M) Q$ |9 A
0 o/ c, z- T: z4 {$ z- j1 p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2026-4-18 21:25 , Processed in 0.109375 second(s), 32 queries , Gzip On.

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

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

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