找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的波形发生器代码和仿真文件

[复制链接]
跳转到指定楼层
楼主
内附程序代码和程序文件以及仿真文件,这次偷懒没写报告




单片机源程序:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #include <absacc.h>
  4. #define uchar unsigned char
  5. uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6. uchar code tab1[8]={0x3f,0x7f,0x40,0x5b,0x06,0xdb,0x3f,0x6d};
  7. uchar code
  8. tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
  9.             0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,
  10.                         0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,
  11.                         0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
  12.                         0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,
  13.                         0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,
  14.                         0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,
  15.                         0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,
  16.                         0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,
  17.                         0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,
  18.                         0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,
  19.                         0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
  20.                         0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
  21.                         0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,
  22.                         0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,
  23.                         0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};
  24. uchar b=0,c=0,d=0,e=0,i,k,tl,th;
  25. int ww=0,qw=0,bw=8,sw=8,gw=8,zkgw=0,zksw=5;
  26. int t,f,m,choice=1,zk=50;
  27. void delay100ms()
  28. {
  29.         unsigned char i,j;
  30.         for(i=200;i>0;i--);
  31.                 for(j=248;j>0;j--);
  32. }
  33. void chushihua(void)
  34. {
  35.         P3=0xfe;
  36.         P2=tab1[0];
  37.         for(i=0;i<=60;i++);
  38.         P3=0xfd;
  39.         P2=tab1[1];
  40.     for(i=0;i<=60;i++);
  41.         P3=0xfb;
  42.         P2=tab1[2];
  43.     for(i=0;i<=60;i++);
  44.         P3=0xfb;//小数点显示P2=0x00;
  45.     for(i=0;i<=60;i++);
  46.         P3=0xf7;
  47.         P2=tab1[3];
  48.     for(i=0;i<=60;i++);
  49.         P3=0xef;P2=tab1[4];
  50.         for(i=0;i<=60;i++);
  51.         P3=0xdf;
  52.         P2=tab1[5];
  53.     for(i=0;i<=60;i++);
  54.         P3=0xbf;P2=tab1[6];
  55.     for(i=0;i<=60;i++);
  56.         P3=0x7f;
  57.         P2=tab1[7];
  58.     for(i=0;i<=60;i++);}
  59.         void key1(void)
  60. {
  61.   if(choice<4)
  62.           choice=choice+1;
  63.   else
  64.           choice=1;}/*个位频率调整*/
  65.     void key2(void)
  66. {
  67.         if(gw<9)
  68. gw=gw+1;
  69.         else
  70.                 gw=0;}
  71.         void key3(void)
  72.         {
  73.                 if(sw<9)
  74.                         sw=sw+1;
  75.                 else
  76.                         sw=0;}/*百位频率调整*/
  77.         void key4(void)
  78.         {
  79.                 if(bw<9)
  80.                         bw=bw+1;
  81.                 else
  82.                         bw=0;}
  83.         void key5(void)
  84.         {
  85.                 if(qw<9)
  86.                         qw=qw+1;
  87.                 else
  88.                         qw=0;}/*万位频率调整*/
  89.         void key6(void)
  90.         {
  91.                 if(ww<5)
  92.                         ww=ww+1;
  93.                 else
  94.                         ww=0;}/*方波占空比加大*/
  95.         void key7(void)
  96.         {
  97.                 if (zk<100)
  98.         zk=zk+1;
  99.         else
  100.                 zk=0;}
  101.         void key8(void)
  102.         {
  103.                 if(zk>=1)
  104.                         zk=zk-1;
  105.                 else
  106.                         zk=0;
  107.         }
  108.         void jisuan(void)
  109.         {TR0=0;//关闭定时器
  110.     f=100000*ww+1000*qw+100*bw+10*sw+gw;
  111.         t=1000000/f;
  112.         th=-t/256;
  113.         tl=-t%256;
  114.         ww=f/10000;
  115.         f=f%10000;
  116.         qw=f/1000;
  117.         f=f%1000;
  118.         bw=f/100;
  119.         f=f%100;
  120.         sw=f/10;
  121.         gw=f%10;
  122.         zkgw=zk%10;
  123.         zksw=zk/10;
  124.         TR0=1;}
  125.         void display (void)
  126.         {
  127.                 P3=0xfb;
  128.                 P2=tab[choice];
  129.                 for(i=0;i<=60;i++);
  130.                 P3=0xfb;
  131.         P2=0x80;//小数点显示
  132.         for(i=0;i<=60;i++);
  133.         P3=0xf7;
  134.                 P2=tab[ww];
  135.                 for(i=0;i<=60;i++);
  136.                 P3=0xef;
  137.                 P2=tab[qw];
  138.                 for(i=0;i<=60;i++);
  139.                 P3=0xdf;P2=tab[bw];
  140.                 for(i=0;i<=60;i++);
  141.                 P3=0xbf;
  142.                 P2=tab[sw];
  143.                 for(i=0;i<=60;i++);
  144.                 P3=0x7f;
  145.                 P2=tab[gw];
  146.                 for(i=0;i<=60;i++);
  147.                 if(choice==3)
  148.                 {P3=0xfd;
  149.                 P2=tab[zkgw];
  150.                 for(i=0;i<=60;i++);
  151.                 P3=0xfe;
  152.                 P2=tab[zksw];
  153.                 for(i=0;i<=60;i++);
  154.         P3=0xfd;
  155.         P2=0x80;//小数点显示
  156.                 for(i=0;i<=60;i++)        ;
  157.                 }}
  158.         void judge (void)
  159.         {
  160.                 {unsigned char X,Y,Z;
  161.                 P1=0xff;
  162. P1=0x0f;//先对P3置数行扫描
  163. if(P1!=0x0f)//判断是否有键按下
  164. {delay100ms();//延时,软件去干扰
  165. if(P1!=0x0f)//确认按键按X=P1;
  166. {
  167.         X=P1;//保存行扫描时有键按下时状态
  168.         P1=0xf0;//列扫描
  169. Y=P1;//保存列扫描时有键按下时状态
  170. Z=X|Y;//取出键值
  171. switch (Z)//判断键值(那一个键按下)
  172. {
  173.    case 0x7d: key1(); break;
  174.    case 0xee: key2(); break;//对键值赋值
  175.    case 0xde: key3(); break;
  176.    case 0xbe: key4(); break;
  177.    case 0x7e: key5(); break;
  178.    case 0xed: key6(); break;
  179.    case 0xdd: key7(); break;
  180.    case 0xbd: key8();break;
  181.                 }}}
  182.         }}
  183. void main (void)
  184. {
  185.         int n;
  186.      for(n=0;n<600;n++)
  187.          {
  188.                  chushihua();
  189.          }
  190. TMOD=0X01;
  191. TR0=1;
  192. th=-t/256;
  193. tl=-t%156;
  194. TH0=th;
  195. TL0=tl;
  196. ET0=1;
  197. EA=1;
  198. while(1)
  199. {
  200.         jisuan();
  201.         for(i=0;i<=50;i++);
  202.         display();
  203.         judge();
  204. }
  205. }
  206. void time0_int(void)
  207. interrupt 1//中断服务程序
  208. {
  209.         TR0=0;
  210.         if(choice==1)
  211. {
  212.                 P0=tosin[b];//正弦波
  213.                 b++;
  214.         }
  215. else
  216. if(choice==2)//三角波
  217. {if(c<=128)P0=c;
  218. else
  219. P0=255-c;
  220. c++;
  221. }
  222. else
  223. if(choice==3)//方波
  224. {k=zk*256/100;d++;
  225. if(d<=k)P0=0x00;
  226. else
  227. P0=0xff;}
  228. else
  229. if(choice==4)//锯齿波

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

全部资料下载地址:
波形发生器.rar (39.34 KB, 下载次数: 103)


评分

参与人数 2黑币 +60 收起 理由
KITE89757 + 10 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:213573 发表于 2017-6-22 08:39 | 只看该作者
下载来试一下
回复

使用道具 举报

板凳
ID:364207 发表于 2018-7-5 23:12 | 只看该作者
请问这些个波形怎么调出来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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