找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4182|回复: 4
收起左侧

用DA0832做简易信号发生器

[复制链接]
ID:71259 发表于 2014-12-30 01:03 | 显示全部楼层 |阅读模式


  1. #include<reg52.h>
  2. #define DA0832 XBYTE[0Xa000]
  3. #define uchar unsigned char
  4. #define S1 XBYTE[0X0000]
  5. #define S2 XBYTE[0X2000]
  6. #define S3 XBYTE[0X4000]
  7. uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  8. uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5
  9. ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5
  10. ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd
  11. ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda
  12. ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99
  13. ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51
  14. ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16
  15. ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00
  16. ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15
  17. ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e
  18. ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
  19. uchar fun=0,b=0,c=0,d=0,tl,th;

  20. void key1(void);
  21. void key2(void);
  22. void key3(void);
  23. void key4(void);
  24. void judge(void);

  25. void main(void)
  26. {
  27. TMOD=0X01;
  28. TR0=1;
  29. th=0xff;
  30. tl=0xd0;
  31. TH0=th;
  32. TL0=tl;
  33. ET0=1;
  34. EA=1;
  35. while(1)
  36. {
  37. judge();
  38. }
  39. }

  40. void judge(void)
  41. {
  42. uchar line,row,de1,de2,keym;
  43. P1=0x0f;
  44. keym=P1;
  45. if(keym==0x0f)return;
  46. for(de1=0;de1<200;de1++)
  47. for(de2=0;de2<125;de2++){;}
  48. P1=0x0f;
  49. keym=P1;
  50. if(keym==0x0f)return;
  51. P1=0x0f;
  52. line=P1;
  53. P1=0xf0;
  54. row=P1;
  55. line=line+row;/*存放特征键值*/

  56. if(line==0xde)key1();
  57. if(line==0x7e)key2();
  58. if(line==0xbd)key3();
  59. if(line==0x7d)key4();
  60. }

  61. void key1(void) //1键选择发波类型,1为正弦波,2为三角波,3为方波
  62. {
  63. fun++;
  64. if(fun==4)fun=0x00;

  65. }

  66. void key2(void) //2键加大频率
  67. {
  68. tl++;
  69. if(tl==0x1f)th++;
  70. }
  71. void key3(void) //3键减小频率
  72. {
  73. tl--;
  74. if(tl==0x00)th--;
  75. }

  76. void key4(void) //4键显示频率
  77. {
  78. double t;
  79. int f;
  80. TR0=0;//ET0的区别
  81. t=(65535-th*256-tl)*0.4;
  82. f=(int)(1000/t);
  83. S3=tab[f%10];
  84. f=f/10;
  85. S2=tab[f%10];
  86. f=f/10;
  87. if(f==0)S1=0;
  88. else S1=tab[f];
  89. TR0=1;
  90. }

  91. void time0_int(void) interrupt 1 //中断服务程序
  92. {
  93. TR0=0;
  94. if(fun==1)
  95. {
  96. DA0832=tosin; //正弦波
  97. b++;
  98. }
  99. else if(fun==2) //三角波
  100. {
  101. if(c<128)DA0832=c;
  102. else DA0832=255-c;
  103. c++;
  104. }
  105. else if(fun==3) // 方波
  106. {
  107. d++;
  108. if(d<=128)DA0832=0x00;
  109. else DA0832=0xff;
  110. }
  111. TH0=th;
  112. TL0=tl;
  113. TR0=1;
  114. }
复制代码


回复

使用道具 举报

ID:102881 发表于 2016-1-12 13:13 | 显示全部楼层
有没有仿真图啊
回复

使用道具 举报

ID:105648 发表于 2016-2-24 18:33 | 显示全部楼层
有没有仿真图啊
回复

使用道具 举报

ID:126636 发表于 2016-6-14 12:51 | 显示全部楼层
程序运行有错误啊
回复

使用道具 举报

ID:135395 发表于 2016-8-13 15:52 | 显示全部楼层
加一个absacc的头文件就可以编译了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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