数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 8142|回复: 42

[C51] 用8脚的STC8G1K08A输出占空比可调的方波

[复制链接]
发表于 2024-1-8 16:31:04 | 显示全部楼层 |阅读模式
本帖最后由 林华信 于 2024-1-9 17:04 编辑

如上题,用8脚的STC8G1K08A输出占空比可调的方波。一个10K电位器接在芯片的第1脚作电压取样,调节电位器,在第7脚输出占空比可变的方波信号,频率大约1KHz。1脚电压越高,7脚输出的占空比越大。


  1. //STC8G1K08A (1.9-5.5V阔电压范围芯片) SOP8  封装的8脚芯片  0.75元一个  单节18650锂电供电,
  2. //4V时空白的芯片电流为1.7mA,烧录程序后为2.5mA(烧录时选12MHz频率)
  3.                                 
  4. //Y0=P3^2; //PWM输出端1%--100%占空比,K=(dat*256+dat1)/500;// 4v Vcc端串联2K到10K电位器上端子,
  5. //下端子接地,中点接P5.4口取样,调节电位器,P3.2脚出1%--100%占空比脉冲
  6. #include <STC8G.h>//你的编译器中要有STC8G.h文件,否则不能通过编译,完整程序如下

  7. #include <intrins.H>
  8. #define uchar unsigned char //宏定义字符型变量
  9. #define uint unsigned int //宏定义整型变量

  10. #define ADC_POWER 0x80 //ADC 电源控制位
  11. #define  ADC_FLAG 0x10 //ADC 转换结束标志位#define
  12. #define ADC_START 0x08 //ADC 开始转换控制位
  13. #define ADC_SPEEDLL 0x00 //210 个时钟周期转换一次
  14. #define ADC_SPEEDL 0x20 //420 个时钟周期转换一次
  15. #define ADC_SPEEDH 0x40 //630 个时钟周期转换一次
  16. #define ADC_SPEEDHH 0x60 //840 个时钟周期转换一次
  17. /********************************************************************
  18. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 初始定义
  19. *********************************************************************/
  20. uint tcnt=0;
  21. uint sec=0;
  22. uint dat=0;
  23. uint dat1=0;
  24. uint dat2=0;

  25. uint K;

  26. /********************************************************************
  27. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? I/O定义
  28. *********************************************************************/
  29. sbit Y0=P3^2; //PWM输出端1%--100%占空比

  30. uchar CLK=0;//脉冲计数
  31. /********************************************************************
  32. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定时器T0初始化
  33. *********************************************************************/
  34. void timer0_init()
  35. {
  36. AUXR &= 0x7F;  //定时器时钟12T模式? ? ? ?
  37. TMOD &= 0xF0;  //设置定时器模式
  38. TMOD |= 0x02; //设置定时器模式? ? ? ?
  39. //TL0 = 0x9D;? ? ? ? ? ? ? ? //设置定时初始值
  40. //TH0 = 0x9D;? ? ? ? ? ? ? ? //设置定时重载值
  41.   TL0 = 0xF6;  //设置定时初始值
  42.   TH0 = 0xF6;  //设置定时重载值
  43. TR0=1; //开始定时
  44. ET0=1;
  45. EA=1;
  46. }
  47. void InitADC()
  48. {
  49. ADC_RES = 0; //AD数据寄存器清空
  50. ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打开AD电源,转换周期210
  51. _nop_(); //延时一个机器周期
  52. _nop_();
  53. _nop_(); //延时一个机器周期
  54. }
  55. /********************************************************************
  56. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 主函数
  57. *********************************************************************/
  58. void main()
  59. {
  60. P3M0 = 0x0c; P3M1 = 0x00;
  61. P5M0 = 0x00; P5M1 = 0x10;
  62. InitADC(); //AD初始化
  63. ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16/16
  64. ADC_CONTR = 0x80; //使能ADC模块
  65. timer0_init();
  66. while(1)
  67. {
  68. ADC_CONTR |= 0x44;  //启动AD转换 选择P5.4口
  69. _nop_();
  70. _nop_();
  71. while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
  72. ADC_CONTR &= ~0x20; //清完成标志

  73. dat = ADC_RES; //读取ADC结果高8位,实际是第B0和B1有用
  74. dat1=ADC_RESL;//读取ADC结果低8位,8个位都有用

  75. K=(dat*256+dat1)/500;//4v串联2K到10K电位器上端子,下端子接地,中点接P5.4口取样

  76. //dat1=ADC_RES/2.5;
  77. //if(dat1<=1){dat1=1;}? ? ? ?
  78. //if(dat1>=100){dat1=100;}
  79. //dat2=dat1+100;
  80. }

  81. }

  82. /********************************************************************
  83. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定时器T0中断服务函数
  84. *********************************************************************/
  85. void t0(void) interrupt 1 using 0 //定时中断服务函数250US一次中断
  86. {

  87. if(K>0)//K越大,占空比越大
  88. {
  89.   if(tcnt==0)  Y0=1;

  90.    if(tcnt==K)  Y0=0;

  91.      tcnt++;
  92.    
  93.     if(tcnt>100)  tcnt=0;

  94. }

  95. }
  96. //}

  97. /********************************************************************
  98. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 结束
  99. *********************************************************************/
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +30 收起 理由
xw801 + 30 我很贊同

查看全部打赏

 楼主| 发表于 2024-1-8 16:32:30 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +20 收起 理由
慕名而来 + 20 認真發帖

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-8 16:33:48 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-8 16:53:07 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-8 17:53:23 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-8 18:20:30 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-8 19:22:18 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-8 20:08:03 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-1-8 20:46:34 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-8 20:50:24 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-8 21:29:07 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-8 23:00:08 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-9 05:54:21 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-9 07:14:17 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2024-1-9 09:09:46 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-9 09:26:59 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-1-9 11:24:41 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 14:10:26 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 17:06:23 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 17:07:56 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-6-11 18:36 , Processed in 0.140400 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

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