找回密码
 立即注册
楼主: hl1200aa

修个设备的电路板,持续更新。

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2023-11-19 11:42:26 | 显示全部楼层
安装好keil4, 按照视频往keil添加MCU,写个点亮dp的文件。
这个板子设计得有点奇葩,明明可以用硬件led驱动数码管,但却选择了软驱,可能大神的想法和我们不同吧。

延时用isp工具算的,一秒闪一次。
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MjcyODZ8NGVhMzNlMmZ8MTc0NjU5OTMwN3wwfA%3D%3D
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MjcyODd8Mzg3M2UxOWJ8MTc0NjU5OTMwN3wwfA%3D%3D
  1. /*********************************************************/
  2. #define MAIN_Fosc        11059200L        //定义主时钟
  3. #include        "STC8Gxxx.h"
  4. /*************        功能说明        *************
  5. 点灯程序
  6. 板载一个两位8字共阳模块
  7. G1 pin16 p3.5
  8. G2 pin17 p3.6
  9. a pin20 p1.1
  10. b pin3  p1.4
  11. c pin5  p1.6
  12. d pin4  p1.5
  13. e pin1  p1.2
  14. f pin2  p1.3
  15. g pin6  p1.7
  16. dp pin7 p5.4
  17. 这次先点dp
  18. G1 G2 设置为高电平        推挽输出    p3.5 p3.6 p3m1=00000000b      p3m0=01100000b                                                                                                                                                                                                                                                                                                         
  19. dp设置为低电平         开漏输出        p5.4 p5m1=00010000b                 p5m0=00010000b
  20. 按正常来说,应该用p1口做led驱动的com口,用p3口做led驱动的seg口
  21. 以利用单片机里面的led硬件驱动
  22. 这个电路板设计得有点奇葩         
  23. ******************************************/
  24. /*************        本地常量声明        **************/
  25. /*************        本地变量声明        **************/
  26. /*************        本地函数声明        **************/
  27. /****************  外部函数声明和外部变量声明 *****************/
  28. /**********************************************/
  29. void Delay100ms(void)        //@11.0592MHz
  30. {
  31.         unsigned char data i, j, k;
  32.         _nop_();
  33.         _nop_();
  34.         i = 5;
  35.         j = 52;
  36.         k = 195;
  37.         do
  38.         {
  39.                 do
  40.                 {
  41.                         while (--k);
  42.                 } while (--j);
  43.         } while (--i);
  44. }
  45. void main(void)
  46. {
  47.         int time100ms = 0;
  48.         P_SW2 |= 0x80;        //允许访问XSFR(扩展特殊功能寄存器)
  49.         P3M1 = 0x00;
  50.         P3M0 = 0x60;
  51.         P5M1 = 0x10;                 
  52.         P5M0 = 0x10;
  53.         P35 = 1;
  54.         P54 = 0;
  55.        
  56.         while (1)
  57.         {
  58.             for(time100ms = 10; time100ms > 0; time100ms--)
  59.                 {
  60.                      Delay100ms();   
  61.                 }
  62.                 P54 = 1;
  63.                   for(time100ms = 10; time100ms > 0; time100ms--)
  64.                 {
  65.                      Delay100ms();   
  66.                 }
  67.                 P54 = 0;                                  
  68.         }
  69. }
复制代码
微信图片_20231119114032.png
微信图片_20231119114053.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2023-12-9 16:52:53 | 显示全部楼层
本帖最后由 hl1200aa 于 2023-12-9 17:25 编辑

根据电路图分配单片机资源

P10   传感器输入  输入  高阻
P11   seg_a  输出  开漏输出
P12   seg_e  输出  开漏输出   
P13   seg_f  输出  开漏输出   
P14   seg_b  输出  开漏输出   
P15   seg_d  输出  开漏输出   
P16   seg_c  输出  开漏输出   
P17   seg_g  输出  开漏输出   

P0M0 = 11111110B 0xfe
P0M1 = 11111110B 0xfe

P30   RX 不分配
P31   TX 不分配
P32   NO2输入 弱上拉
P33   1输出, 推挽输出,缺省高电平。
P34   2输出, 推挽输出,缺省高电平。
P35   数码管共阳G1, 推挽输出
P36   数码管共阳G2, 推挽输出
P37   红外管输出,推挽输出

P3M0 = 11111000B 0xf8
P3M1 = 00000100B 0x04

P54  seg_dp  输出  开漏输出
P55   NO1输入 弱上拉  

P5M0 = 00010000B 0x00
P5M1 = 00010000B 0x10


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:437
  • 最近打卡:2025-05-07 13:06:10

33

主题

2355

回帖

4876

积分

论坛元老

积分
4876
发表于 2023-12-9 17:48:12 | 显示全部楼层
可真行,向人家要固件。。你怎么不发给人家让人家修呢。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2023-12-9 19:18:52 | 显示全部楼层
  1. /*********************************************************/
  2. #define MAIN_Fosc        11059200L        //定义主时钟
  3. #include        "STC8Gxxx.h"
  4. /*************        功能说明        *************
  5. 点灯程序
  6. 板载一个两位8字共阳模块
  7. G1 pin16 p3.5
  8. G2 pin17 p3.6
  9. a pin20 p1.1
  10. b pin3  p1.4
  11. c pin5  p1.6
  12. d pin4  p1.5
  13. e pin1  p1.2
  14. f pin2  p1.3
  15. g pin6  p1.7
  16. dp pin7 p5.4
  17. 这次先点 G1和dp
  18. G1 G2 设置为高电平        推挽输出    p3.5 p3.6 p3m1=00000000b      p3m0=01100000b                                                                                                                                                                                                                                                                                                         
  19. dp设置为低电平         开漏输出        p5.4 p5m1=00010000b                 p5m0=00010000b
  20. 按正常来说,应该用p1口做led驱动的com口,用p3口做led驱动的seg口
  21. 以利用单片机里面的led硬件驱动
  22. 这个电路板设计得有点奇葩         
  23. ******************************************/
  24. /*************        本地常量声明        **************/
  25. /*************        本地变量声明        **************/
  26. /*************        本地函数声明        **************/
  27. /****************  外部函数声明和外部变量声明 *****************/
  28. /**********************************************/
  29. /*
  30. void Delay100ms(void)        //@11.0592MHz
  31. {
  32.         unsigned char data i, j, k;
  33.         _nop_();
  34.         _nop_();
  35.         i = 5;
  36.         j = 52;
  37.         k = 195;
  38.         do
  39.         {
  40.                 do
  41.                 {
  42.                         while (--k);
  43.                 } while (--j);
  44.         } while (--i);
  45. }
  46. */
  47. void main(void)
  48. {
  49.         int time100ms = 0;
  50.         P_SW2 |= 0x80;        //允许访问XSFR(扩展特殊功能寄存器)
  51.         P1M1 = 0xff;
  52.         P1M0 = 0xfe;
  53.         P3M1 = 0x80;
  54.         P3M0 = 0xf8;
  55.         P5M1 = 0x10;                 
  56.         P5M0 = 0x10;
  57.         P35 = 1;
  58.         P35 = 0;
  59.         P36 = 1;
  60.         P36 = 0;
  61.         P54 = 1;
  62.         P54 = 0;
  63.     P1 = P1 | 0xfe;
  64.         P1 = P1 & 0x01;       
  65.         P35 = 1;
  66.         P36 = 1;
  67.        
  68.         P35 = 0;
  69.         P36 = 0;
  70.         //P37 = 0;
  71.         //P37 = 1;
  72.         while (1)
  73.         {
  74.         /*
  75.             for(time100ms = 10; time100ms > 0; time100ms--)
  76.                 {
  77.                      Delay100ms();   
  78.                 }
  79.                 P54 = 1;
  80.                 P1 = P1 | 0xfe;
  81.                   for(time100ms = 10; time100ms > 0; time100ms--)
  82.                 {
  83.                      Delay100ms();   
  84.                 }
  85.                 P54 = 0;
  86.                 P1 = P1 & 0x01;
  87.         */
  88.        
  89.             if(P55 == 1)//        NO1 按下按键高电平
  90.             {
  91.                 P35 = 1;//点亮1号数码管
  92.             }
  93.             else
  94.             {
  95.                 P35 = 0;
  96.             }
  97.                 if(P32 == 1)//        NO2 按下按键高电平
  98.             {
  99.                 
  100.                         P37 = 0;//启动红外管
  101.                         if(P10 == 0)//传感器收到红外电平为底,关闭输出
  102.                         {
  103.                              P36 = 0;//   
  104.                         }
  105.                         else//否则点亮2号数码管
  106.                         {
  107.                             P36 = 1;
  108.                         }
  109.             }
  110.             else
  111.             {
  112.                 P37 = 1;//关闭红外管
  113.                         P36 = 0;
  114.             }
  115.                                           
  116.         }
  117. }
  118. /**********************************************/
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:526
  • 最近打卡:2025-05-07 07:52:42

109

主题

1910

回帖

5304

积分

论坛元老

积分
5304
发表于 2023-12-9 19:47:21 | 显示全部楼层
gentl*** 发表于 2023-11-15 12:10
你向厂家要/买几片 写好程序的芯片 不就行了。

当然,你有能力坚持学下去更好。

买几片写好程序的芯片?估计价格不便宜吧。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:526
  • 最近打卡:2025-05-07 07:52:42

109

主题

1910

回帖

5304

积分

论坛元老

积分
5304
发表于 2023-12-9 19:48:04 | 显示全部楼层
估计得自己摸索工作原理,自己编程烧录程序。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2023-12-10 00:47:28 | 显示全部楼层
  1. /*********************************************************/
  2. #define MAIN_Fosc        11059200L        //定义主时钟
  3. #include        "STC8Gxxx.h"
  4. /*************        功能说明        *************
  5. 整体布局
  6. 功能        管脚        用途                 输入输出     类型      PXM1  PXM0
  7. P10         PIN19       传感器输入      输入         高阻           1     0
  8. P11         PIN20       seg_a           输出         开漏输出  1     1
  9. P12         PIN1        seg_e           输出         开漏输出  1     1
  10. P13         PIN2        seg_f           输出         开漏输出  1          1
  11. P14         PIN3        seg_b           输出         开漏输出  1          1
  12. P15         PIN4        seg_d           输出         开漏输出  1          1
  13. P16         PIN5        seg_c           输出         开漏输出  1          1
  14. P17         PIN6        seg_g           输出         开漏输出  1          1
  15. P0M1 = 11111110B 0xff
  16. P0M0 = 11111110B 0xfe
  17. 功能        管脚        用途                 输入输出     类型      PXM1  PXM0
  18. P30         PIN11       RX  不分配                                                           0         0
  19. P31         PIN12       TX  不分配                                                           0         0
  20. P32         PIN13       NO2输入         输入         准双口    0         0    设置为高电平
  21. P33         PIN14       NO1输出         输出         推挽输出  0     1    缺省高电平。
  22. P34         PIN15       NO2输出         输出         推挽输出  0     1    缺省高电平。
  23. P35         PIN16       数码管共阳G1    输出         推挽输出  0     1
  24. P36         PIN17       数码管共阳G2    输出         推挽输出  0     1
  25. P37         PIN18       红外管输出      输出         开漏输出  1         1    0发光,1灭光
  26. P3M1 = 1000 0000B 0x80
  27. P3M0 = 1111 1000B 0xf8
  28. 功能        管脚        用途                 输入输出     类型      PXM1  PXM0
  29. P54         PIN7        seg_dp          输出         开漏输出  1         1
  30. P55         PIN9        NO1输入         输入         准双口    0     0    设置为高电平  
  31. P5M0 = 0001 0000B 0x10
  32. P5M1 = 0001 0000B 0x10
  33.       
  34. ******************************************/
  35. /*************        本地常量声明        **************/
  36. #define NO1_IN_ON (P55 == 1)
  37. #define NO2_IN_ON (P32 == 1)
  38. #define NO1_OPEN   (P33 = 0)
  39. #define NO1_CLOSE   (P33 = 1)
  40. #define NO2_OPEN   (P34 = 0)
  41. #define NO2_CLOSE   (P34 = 1)
  42. #define IR_ON           (P37 = 0)
  43. #define IR_OFF           (P37 = 1)
  44. #define G1_ON    (P35 = 1)
  45. #define G1_OFF    (P35 = 0)
  46. #define G2_ON    (P36 = 1)
  47. #define G2_OFF    (P36 = 0)
  48. #define SENSOR_ON  (P10 == 0)
  49. /*************        本地变量声明        **************/
  50. /*************        本地函数声明        **************/
  51. /****************  外部函数声明和外部变量声明 *****************/
  52. /**********************************************/
  53. void Delay100ms(void)        //@11.0592MHz
  54. {
  55.         unsigned char data i, j, k;
  56.         _nop_();
  57.         _nop_();
  58.         i = 5;
  59.         j = 52;
  60.         k = 195;
  61.         do
  62.         {
  63.                 do
  64.                 {
  65.                         while (--k);
  66.                 } while (--j);
  67.         } while (--i);
  68. }
  69. void main(void)
  70. {
  71.         int time100ms = 0;
  72.                 char statu_g1 = 0;
  73.                 char statu_g2 = 0;
  74.         P_SW2 |= 0x80;        //允许访问XSFR(扩展特殊功能寄存器)
  75.         //设置管脚模式
  76.         P1M1 = 0xff;
  77.         P1M0 = 0xfe;
  78.         P3M1 = 0x80;
  79.         P3M0 = 0xf8;
  80.         P5M1 = 0x10;                 
  81.         P5M0 = 0x10;
  82.         //P32, P55设置上拉电阻
  83.                 P32 = 1;
  84.                 P55 = 1;
  85.                 //关闭开关
  86.                 NO1_CLOSE;
  87.                 NO2_CLOSE;
  88.                 //关闭IR
  89.         IR_OFF;
  90.                 //关闭G1,G2
  91.                 G1_OFF;
  92.                 G2_OFF;
  93.                 //全部打开数码管的seg
  94.                 P1 &= 0x01;
  95.                 P54 = 0;
  96.                 G1_ON;
  97.                 G2_ON;
  98.                 for(time100ms = 10; time100ms > 0; time100ms--)
  99.         {
  100.              Delay100ms();   
  101.         }
  102.                 G1_OFF;
  103.                 G2_OFF;
  104.         while (1)
  105.         {
  106.         /*
  107.             for(time100ms = 10; time100ms > 0; time100ms--)
  108.                 {
  109.                      Delay100ms();   
  110.                 }
  111.                 P54 = 1;
  112.                 P1 = P1 | 0xfe;
  113.                   for(time100ms = 10; time100ms > 0; time100ms--)
  114.                 {
  115.                      Delay100ms();   
  116.                 }
  117.                 P54 = 0;
  118.                 P1 = P1 & 0x01;
  119.         */
  120.         
  121.             if(NO1_IN_ON)//        NO1 按下按键高电平
  122.             {
  123.                 //如果G2处于关闭状态
  124.                                 if (statu_g2 == 0)
  125.                                 {
  126.                                     G1_ON;//点亮1号数码管
  127.                                         statu_g1 = 1; //改g1状态
  128.                                         IR_ON; //打开红外
  129.                                 }
  130.                                
  131.             }
  132.             if(NO2_IN_ON)//        NO2 按下按键高电平
  133.             {
  134.                //如果G1处于关闭状态
  135.                            if (statu_g1 == 0)
  136.                 {
  137.                                     G2_ON;//点亮2号数码管
  138.                                         statu_g2 = 1;
  139.                                         IR_ON; //打开红外
  140.                                 }
  141.             }
  142.                         if(SENSOR_ON)
  143.                         {
  144.                            //关闭红外
  145.                            IR_OFF;
  146.                            //关闭数码管
  147.                            G1_OFF;
  148.                            G2_OFF;
  149.                            //改状态
  150.                            statu_g1 = 0;
  151.                            statu_g2 = 0;
  152.                         }
  153.                                           
  154.         }
  155. }
  156. /**********************************************/
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2023-12-10 00:53:18 来自手机 | 显示全部楼层
效果
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:169
  • 最近打卡:2025-02-19 20:55:54

0

主题

72

回帖

299

积分

中级会员

积分
299
发表于 2023-12-10 09:34:27 | 显示全部楼层
楼主也是个牛人啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-05-06 20:45:05

10

主题

130

回帖

572

积分

高级会员

积分
572
发表于 2023-12-10 11:32:21 | 显示全部楼层
牛人,修个件,搞成开发了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 14:28 , Processed in 0.139854 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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