找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1092|回复: 0
收起左侧

基于ICL8038以及51单片机的简易信号发生器测频电路 程序原理图PCB文件

[复制链接]
ID:1014016 发表于 2022-3-29 16:19 | 显示全部楼层 |阅读模式
附protel99画的PCB原理图、PCB图、单片机代码
51hei.png 51hei.png 51hei.png 51hei.png

单片机源程序如下:
  1. /***********************************************************
  2. 共阴数码管
  3. ***********************************************************/
  4. #include<reg51.h>
  5. #define uchar         unsigned char
  6. #define uint        unsigned int
  7. uchar code acLEDCS[]={0x01,0x02,0x04,0x08};        /* 位选地址码,“0”有效,位选接的是P0口低4位 */
  8. uchar code acLedSegCode[]={0x3f,0x06,0x5b,0x4f,
  9.                                                    0x66,0x6d,0x7d,0x07,
  10.                                                    0x7f,0x6f,0x77,0x7c};/* 段码 */
  11. uchar acLED[4];                                                        /* 显示缓冲区 */
  12. char  cScanIndex=0,flag=0;                                        /* 位选指针0~3 */
  13. uchar bdata cBakP0 = 0xf0;
  14. uint f=0,nTimer=0,speed=0;


  15. void display()                        
  16. {                                 
  17.                                                   //数据处理
  18.         acLED[0]=acLedSegCode[speed/10/1000];        /* LED显示第1位 */
  19.         acLED[1]=0x80|acLedSegCode[speed/10/100%10];        /* LED显示第2位 */
  20.         acLED[2]=acLedSegCode[speed/10/10%10];        /* LED显示第3位 电机速率*/
  21.         acLED[3]=acLedSegCode[speed/10%10];                /* LED显示第4位 */        
  22. }

  23. void main()
  24. {
  25.         TMOD= 0x15;
  26.         TH0 =0;                 
  27.         TL0 = 0;                        
  28.         TR0 = 1;
  29.         ET0 = 1;

  30.         TH1 = (65536-49989)/256;                 
  31.         TL1 = (65536-49989)%256;                        
  32.         TR1 = 1;
  33.         ET1 = 1;

  34.         EX0 = 1;                                /* 允许外部中断0 */
  35.         EA = 1;                                        /* 开总中断        */
  36.         while(1)
  37.         {
  38.         
  39.                 //*************************显示刷新******************
  40.                 display();
  41.                 P1 = 0;                                        /* 先清显示再换位选 */
  42.                 P0 = cBakP0 | acLEDCS[cScanIndex];                /* 送位选数据 */
  43.                 P1 = acLED[cScanIndex++];                /* 送显示数据,位选指针移位 */   
  44.                 cScanIndex &= 3;                                /* 位选指针回位 */
  45.         if(flag==1)
  46.         {
  47.                 flag=0;
  48.                 display();
  49.                 f=0;
  50.                 nTimer=0;
  51.                 TH0=0;                                                                                                         
  52.         TL0=0;
  53.         TR0=1;
  54.         }

  55.         }
  56. }

  57. void  IntT0() interrupt 1
  58. {  
  59.         f++;
  60. }

  61. void  IntT1() interrupt 3
  62. {

  63.         TH1 = (65536-50045)/256;                 
  64.         TL1 = (65536-50045)%256;  
  65.         nTimer++;
  66.         if(nTimer == 20)
  67.         {
  68.                 speed =f*65536+TH0*256+TL0;
  69.                 TR0=0;
  70.                 flag=1;
  71.                 //nTimer=0;
  72.         }

  73. }
  74. /*void  Pint0() interrupt 0
  75. {
  76. }  */
复制代码

所有资料51hei附件下载:
注意程序是Keil2版本的  PCB是protel99的老版本,如果你的电脑没有安装此软件 请勿下载:
信号发生器ILC8038.7z (559.09 KB, 下载次数: 23)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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