标题: pwm(15单片机)+1602液晶显示 [打印本页]

作者: 承蒙关照    时间: 2019-7-24 15:53
标题: pwm(15单片机)+1602液晶显示
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)




作者: admin    时间: 2019-7-24 16:49
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1