找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于郭天祥lesson4-2程序仿真的疑问

查看数: 1923 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-2-20 10:00

正文摘要:

根据郭师傅的视频一步步走下来的,最终代码如下,郭师傅在视频中用实验板能实现此功能,但我用proteus仿真仿不出来,在线求助。再就是仿真出现图二是什么原因。 单片机源程序如下: //实现的功能:第一位亮一,过一 ...

回复

ID:666011 发表于 2020-3-17 23:13
wulin 发表于 2020-2-20 14:42
学习板上集成了很多功能,而且常有端口和接口复用,利用跳线帽切换电路。楼主想完整仿真一个复杂的学习板上 ...

谢谢啦!长知识了!
ID:213173 发表于 2020-2-20 14:42
学习板上集成了很多功能,而且常有端口和接口复用,利用跳线帽切换电路。楼主想完整仿真一个复杂的学习板上所有功能几乎是不可能成功。只能把某些功能的相关电路分离出来仿真才能成功。程序修改如下:


  1. //实现的功能:第一位亮一,过一秒种后第二位亮二,再过一秒后第三位亮三,然后依次类推
  2. #include<reg52.h>
  3. #include<intrins.h>        //流水灯的循环移动
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. uchar temp,aa,numdu,numwe;
  7. sbit dula=P2^6;//段选
  8. sbit wela=P2^7;//位选
  9. uchar code table[]={
  10. 0x3f,0x06,0x5b,0x4f,
  11. 0x66,0x6d,0x7d,0x07,
  12. 0x7f,0x6f,0x77,0x7c,
  13. 0x39,0x5e,0x79,0x71};
  14. uchar code tablewe[]={                //位的table
  15. 0xfe,0xfd,0xfb,
  16. 0xf7,0xef,0xdf};
  17. //{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  18. void Timer0Init();
  19. void delay(uint z);        //使用定时器延时
  20. void main()
  21. {
  22.         numdu=0;
  23. //        numwe=0;
  24.         aa=0;
  25. //        TMOD=1;//0x01;确定T0T1的工作方式
  26. //        TH0=(65536-50000)/256;//50毫秒产生一次中断
  27. //        TL0=(65536-50000)%256;
  28.         Timer0Init();
  29.         EA=1;//开总中断
  30.         ET0=1;//开定时器0中断
  31. //        TR0=1;//启动定时器
  32.         /*定时/计数器初始化程序应完成如下工作:
  33.         //对TMOD赋值,以确定T0和T1的工作方式。
  34.         //计算初值,并将其写入TH0、TL0或TH1、TL1.
  35.         //中断方式时,则对IE赋值,开放中断。
  36.         //使TR0或TR1置位,启动定时/计数器定时或计数*/
  37.         while(1)
  38.         {
  39.                 if(aa>=20)//1秒
  40.                 {
  41.                         aa=0;
  42.                         numdu++;
  43.                         if(numdu>=6)
  44.                                 numdu=0;
  45.                 }
  46.                 P0=table[numdu+1];
  47.                 dula=1;
  48.                 dula=0;

  49.                 P0=tablewe[numdu];
  50.                 wela=1;
  51.                 wela=0;
  52. //                numwe++;
  53. //                if(numwe==6)
  54. //                        numwe=0;               
  55.                 delay(2);
  56.         }                                 
  57. }

  58. void Timer0Init()        //50毫秒@11.0592MHz
  59. {
  60.         TMOD= 0x01;                //设置定时器模式
  61.         TL0 = 0x00;                //设置定时初值
  62.         TH0 = 0x4C;                //设置定时初值
  63.         TF0 = 0;                //清除TF0标志
  64.         TR0 = 1;                //定时器0开始计时
  65. }

  66. void delay(uint z)
  67. {
  68.         uint x,y;
  69.         for(x=z;x>0;x--)
  70.                 for(y=110;y>0;y--);
  71. }

  72. void timer0() interrupt 1
  73. /*51单片机中using使用在C51编程中,
  74. 用来在中断函数中指定工作寄存器区,
  75. 工作寄存器共有4个区,分别代表R0~R7地址是:
  76. 第0工作区:00H~07H
  77. 第1工作区:08H~0FH
  78. 第2工作区:10H~17H
  79. 第3工作区:18H~1FH
  80. using n,那么n就是第几区,使用方法如下:
  81. void exterint0() interrupt 0 using 1
  82. 这表示外部中断0使用第1工作区地址。*/
  83. {
  84.         TH0=(65536-50000)/256;//50毫秒产生一次中断
  85.         TL0=(65536-50000)%256;
  86.         aa++;
  87. //  if(aa==40)//2秒
  88. //  {
  89. //     aa=0;
  90. //     num++;//num不需初始化,默认为0
  91. //     if(num==16)
  92. //       num=0;
  93. //     dula=1;
  94. //     P0=table[num];
  95. //     dula=0;
  96. //  }               
  97. }
复制代码



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

Powered by 单片机教程网

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