找回密码
 立即注册

QQ登录

只需一步,快速开始

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

pwm(15单片机)+1602液晶显示

[复制链接]
跳转到指定楼层
楼主
ID:583118 发表于 2019-7-24 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pwm(15单片机)+液晶显示  驱动程序 加注释

单片机源程序如下:
  1. #include <STC15F2K60S2.h>

  2. #define u8 unsigned char
  3. #define u16 unsigned int
  4. sbit PWM = P1^0;

  5. extern void InitLcd1602();
  6. extern void LcdShowStr(unsigned char x, unsigned char y,unsigned char *str, unsigned char len);




  7. u8 Trg,Cont;                   //独立按键
  8. #define KEYPROUT P3
  9. void key_read(void)
  10. {
  11.         u8 ReadData = KEYPROUT^0xff;
  12.         Trg = ReadData&(ReadData^Cont);
  13.         Cont = ReadData;
  14. }
  15. void Timer0_Init(void) //1ms   定时器0初始化
  16. {
  17.                 AUXR |= 0x80;        //1T timer       
  18.                 TMOD &= 0xF0;        // 16bit
  19.                 TL0 = 0xCD;               
  20.                 TH0 = 0xD4;               
  21.                 TF0 = 0;               
  22.                 TR0 = 1;               
  23.                 ET0 = 1;
  24.                 EA=1;
  25. }

  26. void Timer1Init(void)                //100微秒@11.0592MHz
  27. {
  28.         AUXR |= 0x40;                //定时器时钟1T模式
  29.         TMOD &= 0x0F;                //设置定时器模式
  30.         TL1 = 0xAE;                //设置定时初值
  31.         TH1 = 0xFB;                //设置定时初值
  32.         TF1 = 0;                //清除TF1标志
  33.         TR1 = 1;                //定时器1开始计时
  34.         ET1 = 1;
  35. }

  36. bit key_flag,timer_500ms_flag;
  37. u8 pwm_set=5;
  38. u8 str[15];
  39. void main(void)
  40. {
  41.                 P2=0xa0;P0=0x00;P2=0x00;    // 关闭蜂鸣器
  42.                 Timer0_Init();              //1ms   定时器0初始化
  43.                 Timer1Init();
  44.                 InitLcd1602();
  45.         while(1)
  46.         {
  47.                 if(timer_500ms_flag)
  48.                 {
  49.                         timer_500ms_flag=0;
  50.                         LcdShowStr(0,0,str,1);
  51.                 }
  52.                
  53.                 str[0] = pwm_set + '0';
  54.                
  55.                 if(key_flag)     // 按键扫描
  56.                         {
  57.                                 key_flag=0;
  58.                                 key_read();
  59.                                 if(Trg&0x08)//s4
  60.                                 {
  61.                                                 pwm_set++;
  62.                                 }
  63.                                 if(Trg&0x04)//s5
  64.                                 {
  65.                                         pwm_set--;
  66.                                 }
  67.                                 if(Trg&0x02)//s6
  68.                                 {
  69.                                        
  70.                                 }
  71.                                 if(Trg&0x01)//s7
  72.                                 {
  73.                                        
  74.                                 }
  75.                                 if(Cont)     //按键按下
  76.                                 {
  77.                                        
  78.                                 }
  79.                                 if(Trg==0&Cont==0) //按键放开
  80.                                 {
  81.                                
  82.                                 }       
  83.                         }
  84.         }
  85. }

  86. void timer0() interrupt 1  using 1                  
  87. {
  88.         static int key_count=0,timer_500ms=0;
  89.         key_count++;timer_500ms++;
  90.         if(key_count==10)                        //10ms 按键扫描
  91.         {
  92.          key_count=0;
  93.          key_flag=1;
  94.         }
  95.         if(timer_500ms==500)
  96.         {
  97.                 timer_500ms=0;
  98.                 timer_500ms_flag=1;
  99.         }

  100. }

  101. void timer1() interrupt 3
  102. {
  103.         static u8 pwm_count=0;
  104.         pwm_count++;
  105.         if(pwm_count==pwm_set)
  106.         {
  107.                 PWM=0;
  108.         }
  109.         if(pwm_count==10)
  110.         {
  111.                 pwm_count=0;
  112.                 PWM=1;
  113.         }
  114.        
  115. }
复制代码

所有资料51hei提供下载:
PWM(15).zip (32.09 KB, 下载次数: 13)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-7-24 16:49 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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