找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3774|回复: 17
打印 上一主题 下一主题
收起左侧

使用单独按键实现渐亮渐灭 单片机程序有问题

  [复制链接]
楼主
ID:213173 发表于 2020-7-20 17:31 | 显示全部楼层
这个不难,按键控制一个标志取反,定时器中断写PWM调光程序,判断标志改变占空比由0%逐渐到100%或由100%逐渐到0%。
回复

使用道具 举报

沙发
ID:213173 发表于 2020-7-21 14:24 | 显示全部楼层
daiwenping 发表于 2020-7-21 11:18
因刚学不太会,有参考的程序吗

渐亮渐暗5秒
  1. #include <reg51.H>
  2. sbit k1 =P3^0;
  3. sbit LED=P1^0;
  4. unsigned char i,num;
  5. bit flag=0;
  6. void keyscan()    //按键扫描
  7. {
  8.         static unsigned char count=0;
  9.         static bit sign=0;
  10.         if(!k1)
  11.         {
  12.                 count++;
  13.                 if(count>=100 && sign==0)
  14.                 {
  15.                         sign=1;
  16.                         flag=~flag;
  17.                 }
  18.         }
  19.         else
  20.         {
  21.                 count=0;
  22.                 sign=0;
  23.         }
  24. }
  25. void Timer0Init()                //500微秒@12.000MHz
  26. {

  27.         TMOD= 0x01;                //设置定时器模式
  28.         TL0 = 0x0C;                //设置定时初值
  29.         TH0 = 0xFE;                //设置定时初值
  30.         TF0 = 0;                //清除TF0标志
  31.         TR0 = 1;                //定时器0开始计时
  32.         EA = 1;
  33.         ET0 = 1;
  34. }

  35. void main(void)
  36. {
  37.     Timer0Init();
  38.         while(1)
  39.         {
  40.                 keyscan();
  41.         }
  42. }

  43. void Timer0Interrupt(void) interrupt 1
  44. {
  45.         TL0 = 0x0C;                //设置定时初值
  46.         TH0 = 0xFE;                //设置定时初值

  47.         if(i>=num)
  48.                 LED=1;
  49.         else LED=0;

  50.         i++;
  51.         if(i==100)
  52.         {
  53.                 i=0;
  54.                 if(flag)
  55.                 {
  56.                         if(num<100)
  57.                                 num++;
  58.                 }
  59.                 else
  60.                 {
  61.                         if(num>0)
  62.                                 num--;
  63.                 }
  64.         }
  65. }
复制代码
回复

使用道具 举报

板凳
ID:213173 发表于 2020-7-22 21:26 | 显示全部楼层
daiwenping 发表于 2020-7-22 15:07
吴工,您好!还是有问题,LED一直不亮;开关无作用;我有点不明白什么,void Timer0Interrupt(void) inte ...

1.这个程序只能用于实物,仿真软件只能用虚拟示波器看波形,LED反映不了亮度变化。
2.定时器中断是独立于主程序按预设时间工作的,无须调用。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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