单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机按键控制脉冲信号+示波器显示源程序+Proteus仿真

[复制链接]
跳转到指定楼层
楼主
运用51单片机的定时器产生高脉冲信号,外接四位示波器显示信号图像。电路中还加了两个按钮,运用外部中断程序实现脉冲信号的调节。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit LED1=P2^0;
  5. sbit LED2=P2^1;
  6. sbit LED3=P2^2;
  7. sbit LED4=P2^3;
  8. sbit LED5=P0^4;
  9. sbit LED6=P0^5;
  10. sbit LED7=P0^6;
  11. sbit LED8=P0^7;

  12. sbit LEVEL=P2^6;//LEVEL,P2.4引脚上的电平值
  13. sbit LEVEL1=P2^5;
  14. sbit LEVEL2=P2^6;
  15. sbit LEVEL3=P2^7;
  16. uchar highcount;        //记录高电平定时次数
  17. uchar zhaowei=0,zhaoweide=0;

  18. uchar count;
  19. uchar counth,countl,count2,count3;
  20. const uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; /*显示0~9*/
  21. const uchar tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; /*显示0~9*/
  22. void delay()
  23. {
  24.   uint i,j;
  25.   for(i=0;i<256;i++);
  26.     for(j=0;j<256;j++);
  27. }
  28. void timer0isr(void) interrupt 1 using 1
  29. {
  30.         TH0 = 0xD8;
  31.         TL0 = 0xF0;   //重置计数初值
  32.         highcount++;           //溢出次数加1
  33.         if(highcount == zhaowei)
  34.         {
  35.                 LEVEL = 0;  
  36.                 if(highcount==100)
  37.                 {
  38.                         highcount=0;
  39.         }
  40. }
  41.         if(highcount == zhaoweide)
  42.         {
  43.                 LEVEL = 1;
  44.                 if(highcount==100)
  45.                 {
  46.                         highcount=0;
  47.         }
  48. }
  49. }


  50. void int0( ) interrupt 0 using 1
  51. {
  52. zhaowei=zhaowei+5;
  53.                 if(zhaowei==100)
  54.                 zhaowei=0;
  55. }
  56. void int1( ) interrupt 2 using 2
  57. {
  58. zhaoweide=zhaoweide+5;
  59.         if(zhaoweide==100)
  60.                 zhaoweide=0;
  61. }
  62. void main(void)
  63. {
  64.         zhaowei=0;
  65.         zhaoweide=0;
  66.         highcount = 0;          //记录高电平定时次数
  67.         TMOD = 0x01;  //设定T/C0工作在定时器方式1
  68.         LEVEL = 0;        //初始电平为高
  69.         TH0 = 0xD8;
  70.         TL0 = 0xF0;         //装载计数初值
  71.         EA = 1;                 //开总中断
  72.         ET0 = 1;         //开T/C0中断
  73.         TR0 = 1;         //启动T/C0
  74.   IT0=1;
  75.   IT1=1;
  76.   EX0=1;
  77.   EX1=1;
  78.   PX1=1;   
  79.   while(1)
  80.   {
  81.     counth=zhaowei/10;
  82.     countl=zhaowei%10;
  83.     P1=tab[counth];
  84.     LED1=1;
  85.     delay();
  86.                 LEVEL1=0;
  87.     LED1=0;
  88.           P1=tab[countl];
  89.     LED2=1;
  90.     delay();
  91.                 LEVEL1=1;
  92.     LED2=0;
  93.                 //第二段数码管
  94.                 count2=zhaoweide/10;
  95.     count3=zhaoweide%10;
  96.     P0=tab1[count2];
  97.     LED3=1;
  98.     delay();
  99.                 LEVEL3=0;
  100.     LED3=0;
  101.           P1=tab1[count3];
  102.     LED4=1;
  103.                 delay();
  104.                 LEVEL3=0;
  105.     LED4=0;
  106.    }
  107. }
复制代码


所有资料51hei提供下载:
利用定时器产生脉冲.zip (184.24 KB, 下载次数: 14)

评分

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

查看全部评分

沙发
erli122 发表于 2019-11-5 12:06 | 只看该作者
不错很好 学习学习
板凳
312338149 发表于 2020-5-7 16:43 | 只看该作者
附件里仿真文件和说的不一样哦,仿真只是单纯加减数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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