找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6175|回复: 1
收起左侧

单片机定时器按键控制两位数码管加减(入门级proteus仿真)

[复制链接]
ID:162360 发表于 2017-12-7 19:57 | 显示全部楼层 |阅读模式
用51单片机的定时器,按键实现两位数码管加减仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
TIM图片20171207195411.png 0.png
单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. sbit S1=P2^0;                                  //第一个数码管
  4. sbit S2=P2^1;                                  //第二个数码管
  5. sbit PWM=P2^2;
  6.        
  7. uchar t,i;          //定义周期   占空比
  8. uchar        m;      //扫描次数   
  9. uchar code seg[]={
  10. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
  11.       };   //0  1  2   3   4    5    6    7    8     9                  */

  12. void InitTimer0()         //定时器0中断初始化子函数
  13. {
  14.     TMOD = 0x01;                 //设置T0为工作方式1     16位
  15.     TH0 = (65536-200)/256;
  16.     TL0 = (65536-200)%256;
  17.     EA = 1;                                //允许总中断标志位
  18.     ET0 = 1;                        //定时器0中断
  19.     TR0 = 1;                        //启动定时器0
  20.         EX0=1;                                //打开外部中断0
  21.     EX1=1;                                //打开外部中断1
  22.         IT0=1;                                //下降沿触发
  23.         IT1=1;                                //下降沿触发
  24. }


  25. void   display(void)           //数码管显示占空比子函数
  26. {
  27.         P0        =0;
  28.         S1        =1;
  29.         S2        =1;        //Seg全输出低,Com全输出高,灭掉显示

  30.         switch(m)
  31.         {
  32.                 case        0:
  33.                         m++;
  34.                        
  35.                         P0=seg[i/10];                   //数码管显示第一位数
  36.                         S1=0;
  37.                         break;
  38.                 case        1:
  39.                         m=0;
  40.                         P0=seg[i%10];                  //数码管显示第二位数
  41.                         S2=0;       
  42.                         break;
  43.                 default:
  44.                         break;       
  45.         }
  46. }


  47. void main()                                //主函数入口
  48. {
  49.    InitTimer0();
  50.    while(1);                         //无限循环
  51. }

  52. void Timer0Interrupt(void) interrupt 1 //定时器中断0
  53. {
  54.     TH0 = (65536-200)/256;                 //重装初值
  55.     TL0 = (65536-200)%256;          
  56.   
  57.         if(++t>=99)
  58.         {
  59.                 t=0;
  60.         }
  61.         if(t>i)
  62.         {
  63.                 PWM        =0;
  64.         }
  65.         else
  66.         {
  67.                 PWM        =1;
  68.         }

  69.         display();       
  70. }       


  71. void Timer1Interrupt(void) interrupt 0 //外部中断0中断服务函数
  72. {
  73. ……………………

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

所有资料51hei提供下载:
定时器按键控制数码管加减.zip (60.41 KB, 下载次数: 96)

评分

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

查看全部评分

回复

使用道具 举报

ID:283883 发表于 2019-6-7 22:36 | 显示全部楼层
是不是按一个按钮加,另一个减?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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