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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
如附件图片功能所述( `' ]6 w2 m5 Y, j' d# S6 U

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

原理图

原理图

该用户从未签到

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:170 ]5 D5 J' h/ r* e  \+ L
这个功能很简单呀

- Z* E* @; {7 [& s: w$ E0 c可能是我太笨了,写不出来
5 z  M+ C; A: A. J

该用户从未签到

4#
 楼主| 发表于 2024-3-26 16:33 | 只看该作者
ce958www 发表于 2024-3-26 14:17: r1 L' R- S" u, f4 L" k! ~) v7 _
这个功能很简单呀

5 K4 X* q& E) d能帮忙写一下吗* l; D. p* _! }+ j& k5 B

该用户从未签到

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:171 |$ ?3 D+ E( o+ A) W1 O
给你个思路吧,建立一个常数记录按钮按下的次数(记得做个按键防抖),然后写一条指令让这个常数大于4的时 ...

% o" G  @) V2 h# @* ^% N/ V真心有点不适合学
. p0 Z" L* f1 b

点评

#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
4 C  i( S  Y8 E* I. G' M真心有点不适合学

4 J0 ?  L0 a. A. i#include <STC15F101W.h>  // 包含 STC15F101W 单片机头文件7 r6 H! g3 T5 F2 |) A' v' O+ c6 B
' f% E- w+ g! O9 A9 o
// 定义引脚
, `* D& T, @% P3 k: }1 qsbit P3_2 = P3^2;. }# o1 z2 \7 m6 b! f/ v, X
sbit P3_3 = P3^3;
0 }8 C* j+ ^  c- k/ s, Q: N) g1 @2 f6 h( m! r
// 定义模式变量和计时器变量0 f9 l3 v: m/ M: Y1 ^
unsigned char mode = 1; 5 I: f3 d8 g( [) K0 d" b, A) m
unsigned int timer = 0;
& J& V+ p1 S/ P; D; |+ S) X3 h: c7 g$ H* {! N; [
// 定义上一次的模式变量,用于断电记忆
# }0 m, T' ]- C+ [8 \2 _unsigned char prevMode = 1;  // 存储上一次的模式
9 [9 F6 y  m3 d( q' i( I' g5 R& F3 I* ?. F
// 用于存储定时器中断计数
  [. q' ]' W1 l2 w( Iunsigned int interruptCount = 0;0 \8 |( D9 E8 X1 t; ]! _' ]5 s

  K: A- ?* @! m7 o// 定时器中断服务程序
$ }9 o* q, A# V/ r4 b7 xvoid Timer0_ISR() interrupt 1
+ K. {3 R$ I/ w  E( L8 P{3 z; J9 z1 E0 d0 `
    switch (mode) {: }2 j: J0 ~/ b, v4 @
        case 1:; i, V( ~2 D! o$ R# g
            P3_3 = !P3_3;  // 切换 P3.3 的电平/ s5 f4 y' ?3 A" L6 C
            interruptCount++;  // 中断计数加 1
. P+ J* `( ^4 o! o' g) X            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒7 V' w: M* ?- d4 O
                interruptCount = 0; ; F' Z* z9 U" e/ R" k, u$ g+ |
                mode = 2;  // 切换到下一个模式6 F/ D0 e% g- E" L, ~
            }, h! o" ?- W* F, H
            break;
! ~6 d! G: G1 h0 G3 r  C/ K( ~        case 2:
" b( U3 P" x* V            P3_3 = !P3_3;  // 切换 P3.3 的电平( A4 G# ^# i% a) z) D9 h; E+ u8 {
            interruptCount++;  // 中断计数加 1
2 O0 [% b* ^/ y; l, n) P            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒: R" Z; {$ i7 s& T! I
                interruptCount = 0; 6 I1 |$ P8 N6 r/ P
                mode = 3;  // 切换到下一个模式
7 }/ q4 V1 Y) D, S( Z            }
2 {# F9 r* S6 G# ^) G            break;
- O# c* }/ Z0 l        case 3:
6 p4 D6 u- U! K6 B            P3_3 = !P3_3;  // 切换 P3.3 的电平
( w1 v. H6 T, T5 v( O  [! y+ M5 C            interruptCount++;  // 中断计数加 1
$ S6 O% x! c2 E            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒, g! T: Z0 S+ J+ U
                interruptCount = 0;
; i! ~9 \* {9 U. R% ]                mode = 4;  // 切换到下一个模式4 K; S& S' ?' `- I5 a* ^# U
            }* A, k3 E* ?+ x9 i3 k, F! S
            break;; Z: c3 O$ |+ ], h" L
        case 4:
5 C& i, }# ~0 `8 A8 y- O            P3_3 = !P3_3;  // 切换 P3.3 的电平
3 `( _* l: g4 q+ K0 X            interruptCount++;  // 中断计数加 1
/ {# w9 t6 b& }5 }- T. B5 K            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
' w0 O3 |& V* c; g                interruptCount = 0; 5 ]6 \, A4 G9 ^* c  ^! F
                mode = 5;  // 切换到下一个模式1 d6 I. d8 m9 f
            }7 d1 W, `* T" Y# g
            break;5 o  `6 |9 g) H# R* C2 `" v
        case 5:  v+ {) g! n! R$ @7 I
            P3_3 = !P3_3;  // 切换 P3.3 的电平
+ S* e5 N4 j( k2 Q            interruptCount++;  // 中断计数加 1
  F& `+ y/ o8 `9 ]: _7 t) w9 e* {            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒
- Z4 @( d9 I( ~% T, p5 ?                interruptCount = 0;
5 c) }! Q6 g: k9 n) s, N; N( a                mode = 6;  // 切换到下一个模式1 y% n* e1 w( y" A5 E4 k! |
            }. d/ D" ?* S/ o& a
            break;% _; A; u5 T8 s( L" I8 K4 D4 Y( ^& e
        case 6:; D" q1 U6 [9 S4 L8 w" @
            P3_3 = !P3_3;  // 切换 P3.3 的电平
5 C. C9 J7 @  N  E- j$ i/ o- |5 [            interruptCount++;  // 中断计数加 1
% Y  T8 _" e4 H6 ^. C            if (interruptCount == 50) {  // 中断计数达到 50,即 0.5 秒9 v4 ]* p1 s3 K  I5 {/ X" ^
                interruptCount = 0;
) p* w6 F# G+ |7 j3 E                mode = 1;  // 切换到第一个模式,开始新的循环6 H5 L' C: O, @" p; c
            }
5 y* b, w' X# k0 q: _            break;* k7 _* p/ p7 {8 s% C2 v
    }
# P% Y( F; y  ?% B0 }2 p  C( |) m}
" t- J: J# ^5 n% g
8 h% ^3 a% q4 B. a/ }0 j+ W' E// 初始化定时器
4 l' z. P2 t3 Qvoid Init_Timer0()
- z4 t0 b: U" H+ c1 g7 n{
3 r. Q( X& M6 R% N/ A2 m1 N    TMOD = 0x01;  // 设置定时器 0 为工作模式 1# c. V9 u; G% V% T
    TH0 = (65536 - 50) / 256;  // 设置定时器初值1 P8 T4 K* V2 V7 [6 z
    TL0 = (65536 - 50) % 256;  // 设置定时器初值1 m$ ?. t0 L" M: E+ ^
    ET0 = 1;  // 使能定时器 0 中断2 Z6 g% S0 H8 b1 I4 i8 k% P* O: h
    TR0 = 1;  // 启动定时器 0. p9 i0 l' m2 M  ]5 Q, q
}2 x6 m7 f" t6 a! x) t

6 o& U/ d6 n% Z/ S// 主程序
8 @  T3 W* P; v" G1 vvoid main()5 M% w# H- I5 m
{
0 S' Y2 o. `% e1 T: g- I# J+ `7 ^    // 初始化引脚和定时器
: N1 _" v" _' Z2 s  \0 j* A# {: n    P3M0 = 0x00; 6 \2 a9 r7 U/ W4 ^
    P3M1 = 0x00; % O1 [+ Z9 J( ?: s* B
    Init_Timer0();
9 p( V$ B$ Z2 e3 T
8 g) K1 d8 S1 u! u# k; T0 J4 S    // 上电默认模式 1# j, b0 J1 ^$ z2 p* ?9 A! U  z
    mode = 1;
/ E2 ^$ @- R$ E+ }" ]3 u9 c- K6 C3 A* x5 _: j0 H  a
    // 开启总中断
& z# c* A" s+ c3 l+ Q0 J  x    EA = 1; / l2 M; Q# U# N$ ?* A8 a1 L) w

+ ~: b; i( B* ^- a    while (1) {
% Y9 B" \. M5 X' I* b" X3 V0 d6 N        if (P3_2 == 0) {  // 检测 P3.2 按键按下
9 F' G/ ^+ ~3 G+ b; @, ~0 |            mode++;  // 切换模式
4 d" ~( C5 P8 V  h" I3 J            if (mode > 6) {! r: u2 M7 E$ M6 q. |0 q/ ~
                mode = 1;  // 超出模式范围时,回到模式 18 e) {+ _. k8 \. w, l9 Z
            }
! K& |0 ?4 P/ ]/ Z/ }            prevMode = mode;  // 更新上一次的模式$ L% ^: F8 H+ c5 F; _1 r
        }0 s: ]) ]! T- s  c/ d7 r3 f6 p
    }, z: M7 E5 S8 `. K
}# }8 c4 M* P( p' t0 h" k
6 K! S5 c, A4 ^% P: N+ Z+ [
求指点,编译出错!
/ H9 `! i& O6 M0 u! U
& ?' `+ r+ s" i( ]/ }) k! P$ o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-27 04:48 , Processed in 0.093750 second(s), 27 queries , Gzip On.

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

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

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