找回密码
 立即注册

QQ登录

只需一步,快速开始

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

L298N风扇调速OLED显示占空比的单片机源程序

[复制链接]
跳转到指定楼层
楼主
新人报道 发个PWM风扇程序  OLED显示占空比  高手勿喷




单片机源程序如下:
  1. #include<reg51.h>
  2. #include "oled.h"
  3. #include "bmp.h"
  4. #define        uchar unsigned char
  5. #define uint  unsigned int
  6. sbit MOTOR_A_1=P2^2;
  7. sbit MOTOR_A_2=P2^3;
  8. sbit k1=P1^0;        //速度+
  9. sbit k2=P1^1;   //速度-
  10. sbit k3=P1^2;   //停止
  11. uchar T=0;            //定时标记
  12. uchar W=0;            //脉宽值0~32
  13. uchar k=0;            //按键标记
  14. uchar i=0;            //计数变量
  15. uchar a,b;
  16. /*******************延时***************************/
  17. void delayMs(uint a)
  18. {
  19.     uint i, j;
  20.     for(i = a; i > 0; i--)
  21.         for(j = 100; j > 0; j--);
  22. }
  23. /**********************************************************************
  24.                                                         定时器变量定义
  25. **********************************************************************/


  26. void init(void)
  27. {
  28.         //启动中断
  29.         TMOD=0x01;
  30.         TH0=(65536-1000)/256;
  31.         TL0=(65536-1000)%256; //0.5ms中断一次
  32.                
  33.         EA=1;                                               
  34.         ET0=1;
  35.         TR0=1;

  36. }

  37. void timer0() interrupt 1
  38. {                                    
  39.         //重置定时器时间
  40.         TH0=(65536-1000)/256;
  41.         TL0=(65536-1000)%256;
  42.         T++;           //定时标记加1
  43.         if(T==16)
  44.         {       
  45.          T=0;
  46.         }
  47.          
  48.         if(T>=W)
  49.                 MOTOR_A_1 =0;
  50.         else
  51.                 MOTOR_A_1 =1;
  52. }                       

  53. /**********************************************************************
  54.                                                         独立按键检测
  55. **********************************************************************/
  56. void key(void)           //按键判断程序
  57. {
  58.         if(k1==0)                                                        //按键1按下
  59.         {
  60.                 while(k1==0);                                //按键1抬起
  61.                 if(W==16)                                        //如果脉宽为100
  62.                         W=0;                                                        //脉宽置0
  63.                 else
  64.                         W+=1;                                                        //否则加1
  65.         }
  66.         else if(k2==0)                                //按键2按下
  67.         {                                 
  68.                 while(k2==0);                                //按键2抬起
  69.                 if(W==0)                                                //如果脉宽为0
  70.                         W=16;                                                //脉宽设置成100
  71.                 else
  72.                         W-=1;                                                        //否则减1
  73.         }
  74.         else if(k3==0)                                //按键3按下
  75.         {                          
  76.                 while(k3==0);                                //按键3抬起
  77.                 W=0;                                                                //脉宽清0                                                                       
  78.         }
  79. }
  80. void display1()
  81. {
  82.         if(a == 0 && b == 0)
  83.                 {
  84.                 OLED_ShowString(0,2,"  ",16);
  85.                 OLED_ShowString(96,2,"  ",16);
  86.                 OLED_ShowString(0,4,"  ",16);
  87.                 OLED_ShowString(96,4,"  ",16);
  88.                 }
  89.                 else
  90.                 {

  91.                 OLED_ShowChar(0,2,' '+95,16);         //指针旋转
  92.                 OLED_ShowChar(8,2,' '+0,16);
  93.                 OLED_ShowChar(8,4,' '+0,16);
  94.                 OLED_ShowChar(0,4,' '+0,16);
  95.                 OLED_ShowChar(96,2,' '+95,16);
  96.                 OLED_ShowChar(104,2,' '+0,16);
  97.                 OLED_ShowChar(104,4,' '+0,16);
  98.                 OLED_ShowChar(96,4,' '+0,16);
  99.                 delayMs(100);
  100.                 OLED_ShowChar(0,2,' '+0,16);
  101.                 OLED_ShowChar(8,2,' '+15,16);
  102.                 OLED_ShowChar(8,4,' '+0,16);
  103.                 OLED_ShowChar(0,4,' '+0,16);
  104.                 OLED_ShowChar(96,2,' '+0,16);
  105.                 OLED_ShowChar(104,2,' '+15,16);
  106.                 OLED_ShowChar(104,4,' '+0,16);
  107.                 OLED_ShowChar(96,4,' '+0,16);
  108.                 delayMs(100);
  109.                 OLED_ShowChar(0,2,' '+0,16);
  110.                 OLED_ShowChar(8,2,' '+0,16);
  111.                 OLED_ShowChar(8,4,' '+95,16);
  112.                 OLED_ShowChar(0,4,' '+0,16);
  113.                 OLED_ShowChar(96,2,' '+0,16);
  114.                 OLED_ShowChar(104,2,' '+0,16);
  115.                 OLED_ShowChar(104,4,' '+95,16);
  116.                 OLED_ShowChar(96,4,' '+0,16);
  117.                 delayMs(100);
  118.                 OLED_ShowChar(0,2,' '+0,16);
  119.                 OLED_ShowChar(8,2,' '+0,16);
  120.                 OLED_ShowChar(8,4,' '+0,16);
  121.                 OLED_ShowChar(0,4,' '+15,16);
  122.                 OLED_ShowChar(96,2,' '+0,16);
  123.                 OLED_ShowChar(104,2,' '+0,16);
  124.                 OLED_ShowChar(104,4,' '+0,16);
  125.                 OLED_ShowChar(96,4,' '+15,16);
  126.        

  127. //                OLED_ShowString(0,2,"> ",16);                 //>符号跳动
  128. //                OLED_ShowString(0,4,"> ",16);
  129. //                OLED_ShowString(96,2," <",16);
  130. //                OLED_ShowString(96,4," <",16);
  131. //                delayMs(100);
  132. //                OLED_ShowString(0,2," >",16);
  133. //                OLED_ShowString(0,4," >",16);
  134. //                OLED_ShowString(96,2,"< ",16);
  135. //                OLED_ShowString(96,4,"< ",16);
  136. //                delayMs(100);
  137.                 }
  138. }
  139. void display2()
  140. {
  141. if(W == 0)
  142.                 {
  143.                 OLED_ShowString(0,6,"                ",16);
  144.                 }
  145.                 else if(W == 1)
  146.                 {
  147.                 OLED_ShowString(0,6,">               ",16);
  148.                 }
  149.                 else if(W == 2)
  150.                 {
  151.                 OLED_ShowString(0,6,">>              ",16);
  152.                 }
  153.                 else if(W == 3)
  154.                 {
  155.                 OLED_ShowString(0,6,">>>             ",16);
  156.                 }
  157.                 else if(W == 4)
  158.                 {
  159.                 OLED_ShowString(0,6,">>>>            ",16);
  160.                 }
  161.                 else if(W == 5)
  162.                 {
  163.                 OLED_ShowString(0,6,">>>>>           ",16);
  164.                 }
  165.                 else if(W == 6)
  166.                 {
  167.                 OLED_ShowString(0,6,">>>>>>          ",16);
  168.                 }
  169.                 else if(W == 7)
  170.                 {
  171.                 OLED_ShowString(0,6,">>>>>>>         ",16);
  172.                 }
  173.                 else if(W == 8)
  174.                 {
  175.                 OLED_ShowString(0,6,">>>>>>>>        ",16);
  176.                 }
  177.                 else if(W == 9)
  178.                 {
  179.                 OLED_ShowString(0,6,">>>>>>>>>       ",16);
  180.                 }
  181.                 else if(W == 10)
  182.                 {
  183.                 OLED_ShowString(0,6,">>>>>>>>>>      ",16);
  184.                 }
  185.                 else if(W == 11)
  186.                 {
  187.                 OLED_ShowString(0,6,">>>>>>>>>>>     ",16);
  188.                 }
  189.                 else if(W == 12)
  190.                 {
  191.                 OLED_ShowString(0,6,">>>>>>>>>>>>    ",16);
  192.                 }
  193.                 else if(W == 13)
  194.                 {
  195.                 OLED_ShowString(0,6,">>>>>>>>>>>>>   ",16);
  196.                 }
  197.                 else if(W == 14)
  198.                 {
  199.                 OLED_ShowString(0,6,">>>>>>>>>>>>>>  ",16);
  200.                 }
  201.                 else if(W == 15)
  202.                 {
  203.                 OLED_ShowString(0,6,">>>>>>>>>>>>>>> ",16);
  204.                 }
  205.                 else if(W == 16)
  206.                 {
  207.                 OLED_ShowString(0,6,">>>>>>>>>>>>>>>>",16);
  208.                 }
  209. }

  210. void main()
  211. {       
  212.         
  213.                 OLED_Init();
  214.                 OLED_Display_Off();
  215.                 OLED_Clear();
  216.                 OLED_Display_On();
  217.                 OLED_ShowCHinese(0,0,12);
  218.                 OLED_ShowCHinese(16,0,5);
  219.                 OLED_ShowCHinese(32,0,6);
  220.                 OLED_ShowCHinese(48,0,7);
  221.                 OLED_ShowCHinese(64,0,8);
  222.                 OLED_ShowCHinese(80,0,9);
  223.                 OLED_ShowCHinese(96,0,10);
  224.                 OLED_ShowCHinese(112,0,11);
  225.                 OLED_DrawBMP(4,2,124,8,BMP1);
  226. ……………………

  227. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
L298N调速OLED显示占空比.zip (61.84 KB, 下载次数: 31)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:130345 发表于 2017-8-18 10:04 | 只看该作者
学习一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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