找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机定时器占空比按键调整Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include "reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar COUNT100,PWMCOUNT;
  5. /*LCD 端口定义*/
  6. sbit RS=P3^7;
  7. sbit RW=P3^6;
  8. sbit E=P3^5;
  9. sbit PWM=P1^0;

  10. sbit K1=P3^0;//加1
  11. sbit K2=P3^1;//减1

  12. sfr LCDData=0x80;//0x80--P0,0X90--P1,0xa0--P2,0xb0--P3
  13. /************液晶驱动程序********************/
  14. /*延时函数 delay*/  
  15. void delay(uint i)
  16. {
  17.         while(i--);                        
  18. }

  19. /*******液晶驱动函数*******/  
  20. void write_instruction(uchar x) //字节写入
  21. {
  22.    delay(1000);
  23.    E=0;
  24.    RW=0;
  25.    RS=0;
  26.    LCDData=x;
  27.    E=1;
  28.    delay(20);
  29.    E=0;
  30. }
  31. void write_data(uchar x)         //数据写入
  32. {
  33.    delay(1000);
  34.    E=0;
  35.    RW=0;
  36.    RS=1;
  37.    E=1;
  38.    LCDData=x;
  39.    E=0;
  40. }
  41. void cla(void)                           //清屏
  42. {
  43.         write_instruction(0x01);
  44. }
  45. void initlcd(void)                        //初始化
  46. {
  47.         write_instruction(0x38);  //显示模式
  48.         delay(200);
  49.         write_instruction(0x0c);  //设置开显示,不显示光标
  50.         delay(200);
  51.         write_instruction(0x06);  //写一个字符后地址指针加一
  52.         delay(200);
  53.         cla();
  54. //        delay(200);
  55. }
  56. void write_string(uchar x,uchar *p)         //字符串写入
  57. {
  58.         write_instruction(x);
  59.         while(*p!=0x00)
  60.         {
  61.                 write_data(*p);
  62.                 p++;
  63.                 if(x++==0x8f)
  64.                 {
  65.                         write_instruction(0xc0);
  66.                 }
  67.         }
  68. }
  69. /************液晶驱动程序结束***********************/
  70. void DISPPWM(uchar add,uchar p)
  71. {
  72.         write_instruction(add);
  73.         write_data(p/100+0x30);
  74.         write_data(p%100/10+0x30);
  75.         write_data(p%100%10+0x30);
  76.         write_data('%');
  77. }
  78. /*******键盘驱动程序******************/

  79. void pwmScanKey()
  80. {               
  81.                 if(K1==0)
  82.                 {
  83.                         while(K1==0);//等待按键释放
  84.                         if(PWMCOUNT<100)
  85.                                 PWMCOUNT=PWMCOUNT+10;
  86.                 }
  87.                
  88.                 if(K2==0)
  89.                 {
  90.                         while(K2==0);//等待按键释放
  91.                         if(PWMCOUNT>0)
  92.                                 PWMCOUNT=PWMCOUNT-10;
  93.                 }
  94.                                 
  95.                 DISPPWM(0x84, PWMCOUNT);
  96.                
  97. }

  98. void main(void)
  99. {
  100.         initlcd();//初始化液晶
  101.         delay(0xffff);
  102.         COUNT100=0;
  103.         PWMCOUNT=50;
  104.         
  105.         write_string(0x80,"PWM=");
  106.         DISPPWM(0x84, PWMCOUNT);
  107.         
  108.         TMOD=0x01;//设置定时器0 方式 1,16 位定时方式
  109.         EA=1;//打开中断允许总控制位
  110.         ET0=1;//打开定时器0 溢出中断允许位
  111.         TL0=0x66;//定时器0 的计数器赋初值, t=(2^16-a)*12/fosc,fosc=11.059sMHz
  112.         TH0=0xfc;
  113.         TR0=1;//启动定时器0
  114.         while(1)
  115.         {
  116.                 pwmScanKey();

  117.         }
  118.                 //等待中断
  119.         
  120. }
  121. void TIME0ISR(void)         interrupt 1
  122. {
  123.          //PWM=0;
  124.         TL0=0x66;
  125.         TH0=0xfc;
  126.         COUNT100++;
  127.         if(COUNT100==100)
  128.         {
  129.                 COUNT100=0;
  130.         }
  131.         if(COUNT100<PWMCOUNT)
  132.         {
  133.                 PWM=1;
  134.         }
  135.         else
  136.         {
  137.                 PWM=0;
  138.         }
  139. }
复制代码



全部资料51hei下载地址:
占占空比按键.zip (75.82 KB, 下载次数: 31)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:470807 发表于 2019-12-18 23:59 | 只看该作者
非常好的程序
回复

使用道具 举报

板凳
ID:667984 发表于 2019-12-19 09:04 | 只看该作者
学到了,真好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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