找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2895|回复: 3
收起左侧

《51单片机PV趣味制作详解》源码 光盘资料下载

[复制链接]
ID:276654 发表于 2018-2-9 12:08 | 显示全部楼层 |阅读模式
《51单片机PV趣味制作详解》光盘资料包:
0.png


所有资料51hei提供下载:
51单片机PV趣味制作详解.rar (40.81 KB, 下载次数: 24)


下面是部分内容预览:
第3章的单片机源程序如下:
  1. //-------------------------------------------------------------------------------------------
  2. // 程序名:CPU风扇上的POV
  3. // 编  程:周正华
  4. // 说  明:单片机89S2051,晶振12M
  5. //-------------------------------------------------------------------------------------------

  6. //-------------------------------------------------------------------------------------------
  7. //**  嵌入文件  **
  8. //-------------------------------------------------------------------------------------------
  9. #include <reg52.h>                  //51单片机硬件资源参数说明

  10. //-------------------------------------------------------------------------------------------
  11. //**  变量说明  **
  12. //-------------------------------------------------------------------------------------------

  13. unsigned char V[25];               //显示缓冲区用数组
  14. unsigned char i,j;                 //显示定位,i:字符,j:字符其中的一列
  15. unsigned int S;                    //每隔5毫秒的时间计数
  16. unsigned char BG,BZ;               //显示状态用标志
  17. unsigned int N;                    //转速计数值
  18. unsigned int Rt;                   //LED显示一列的时间

  19. unsigned char cc;                  //取数值的位用变量
  20. unsigned int aa,bb,num;

  21. /*字符字模*/
  22. unsigned char code ASCIIDOC[] =    // -ASCII-编号
  23. {
  24.         0x3E,0x45,0x49,0x51,0x3E,0x00, // -0-0
  25.         0x00,0x21,0x7F,0x01,0x00,0x00, // -1-1
  26.         0x23,0x45,0x49,0x49,0x31,0x00, // -2-2
  27.         0x42,0x41,0x49,0x59,0x66,0x00, // -3-3
  28.         0x0C,0x14,0x24,0x7F,0x04,0x00, // -4-4
  29.         0x72,0x51,0x51,0x51,0x4E,0x00, // -5-5
  30.         0x1E,0x29,0x49,0x49,0x46,0x00, // -6-6
  31.         0x40,0x47,0x48,0x50,0x60,0x00, // -7-7
  32.         0x36,0x49,0x49,0x49,0x36,0x00, // -8-8
  33.         0x31,0x49,0x49,0x4A,0x3C,0x00, // -9-9

  34.         0x00,0x00,0x00,0x00,0x00,0x00, // - -10
  35.         0x00,0x00,0x7D,0x00,0x00,0x00, // -!-11
  36.         0x02,0x04,0x08,0x10,0x20,0x00, // -/-12
  37.     0x00,0x36,0x36,0x00,0x00,0x00, // -:-13

  38.         0x1F,0x24,0x44,0x24,0x1F,0x00, // -A-14
  39.         0x7F,0x49,0x49,0x49,0x36,0x00, // -B-15
  40.         0x3E,0x41,0x41,0x41,0x22,0x00, // -C-16
  41.         0x7F,0x41,0x41,0x41,0x3E,0x00, // -D-17
  42.         0x7F,0x49,0x49,0x49,0x41,0x00, // -E-18
  43.         0x7F,0x48,0x48,0x48,0x40,0x00, // -F-19
  44.         0x3E,0x41,0x45,0x45,0x27,0x00, // -G-20
  45.         0x7F,0x08,0x08,0x08,0x7F,0x00, // -H-21
  46.         0x00,0x41,0x7F,0x41,0x00,0x00, // -I-22
  47.         0x02,0x01,0x41,0x7E,0x40,0x00, // -J-23
  48.         0x7F,0x08,0x14,0x22,0x41,0x00, // -K-24
  49.         0x7F,0x01,0x01,0x01,0x01,0x00, // -L-25
  50.         0x7F,0x20,0x18,0x20,0x7F,0x00, // -M-26
  51.         0x7F,0x10,0x08,0x04,0x7F,0x00, // -N-27
  52.         0x3E,0x41,0x41,0x41,0x3E,0x00, // -O-28
  53.         0x7F,0x48,0x48,0x48,0x30,0x00, // -P-29
  54.         0x3E,0x41,0x45,0x42,0x3D,0x00, // -Q-30
  55.         0x7F,0x48,0x4C,0x4A,0x31,0x00, // -R-31
  56.         0x32,0x49,0x49,0x49,0x26,0x00, // -S-32
  57.         0x40,0x40,0x7F,0x40,0x40,0x00, // -T-33
  58.         0x7E,0x01,0x01,0x01,0x7E,0x00, // -U-34
  59.         0x7C,0x02,0x01,0x02,0x7C,0x00, // -V-35
  60.         0x7F,0x02,0x0C,0x02,0x7F,0x00, // -W-36
  61.         0x63,0x14,0x08,0x14,0x63,0x00, // -X-37
  62.         0x60,0x10,0x0F,0x10,0x60,0x00, // -Y-38
  63.         0x43,0x45,0x49,0x51,0x61,0x00, // -Z-39

  64.         0x12,0x15,0x15,0x0E,0x01,0x00, // -a-40
  65.         0x7F,0x0A,0x11,0x11,0x0E,0x00, // -b-41
  66.         0x0E,0x11,0x11,0x11,0x08,0x00, // -c-42
  67.         0x0E,0x11,0x11,0x0A,0x7F,0x00, // -d-43
  68.         0x0E,0x15,0x15,0x15,0x08,0x00, // -e-44
  69.         0x08,0x3F,0x48,0x48,0x20,0x00, // -f-45
  70.         0x0C,0x12,0x12,0x12,0x0F,0x00, // -g-46
  71.         0x7F,0x08,0x10,0x10,0x0F,0x00, // -h-47
  72.         0x00,0x00,0x4F,0x00,0x00,0x00, // -i-48
  73.         0x00,0x00,0x08,0x4F,0x00,0x00, // -j-49
  74.         0x7F,0x04,0x0A,0x11,0x01,0x00, // -k-50
  75.         0x00,0x41,0x7F,0x01,0x00,0x00, // -l-51
  76.         0x0F,0x10,0x0F,0x10,0x0F,0x00, // -m-52
  77.         0x10,0x0F,0x10,0x10,0x0F,0x00, // -n-53
  78.         0x0E,0x11,0x11,0x11,0x0E,0x00, // -o-54
  79.         0x1F,0x12,0x12,0x12,0x0C,0x00, // -p-55
  80.         0x0C,0x12,0x12,0x12,0x1F,0x00, // -q-56
  81.         0x10,0x0F,0x10,0x10,0x08,0x00, // -r-57
  82.         0x09,0x15,0x15,0x15,0x12,0x00, // -s-58
  83.         0x10,0x7E,0x11,0x11,0x12,0x00, // -t-59
  84.         0x1E,0x01,0x01,0x1E,0x01,0x00, // -u-60
  85.         0x1C,0x02,0x01,0x02,0x1C,0x00, // -v-61
  86.         0x1E,0x01,0x1E,0x01,0x1E,0x00, // -w-62
  87.         0x11,0x0A,0x04,0x0A,0x11,0x00, // -x-63
  88.         0x1C,0x02,0x02,0x04,0x1F,0x00, // -y-64
  89.         0x11,0x13,0x15,0x19,0x11,0x00, // -z-65
  90. };

  91. //-------------------------------------------------------------------------------------------
  92. //** 外部中断0处理程序
  93. //-------------------------------------------------------------------------------------------
  94. void intersvr0(void) interrupt 0 using 1
  95. {
  96.   TH0=-137/256; TL0=-137%256;          //给定时器一定的偏移量,
  97.                                        //让外部中断与定时中断在时间上错开,避免冲突
  98.   i=24; P1=0xff; ET0=1;                //显示初始化
  99.   N++;                                 //进行转速计数
  100. }

  101. //-------------------------------------------------------------------------------------------
  102. //** 定时中断0处理函数 **
  103. //-------------------------------------------------------------------------------------------
  104. void timer0(void) interrupt 1 using 1
  105. {
  106.   TH0=-(Rt/256); TL0=-(Rt%256);       //显示"一排"LED的时间
  107.   if(j>0) j--;                        //在字符表中取字
  108.   else {
  109.     j=5;
  110.     {
  111.       if(i>0) i--;
  112.       else {
  113.             i=0;
  114.             ET0=0;
  115.           }
  116.     }
  117.   }
  118.   P1=~ASCIIDOC[V[i]*6+j];            //取出的数据到输出口
  119. }

  120. //-------------------------------------------------------------------------------------------
  121. //** 定时中断1处理函数 **
  122. //-------------------------------------------------------------------------------------------

  123. void timer1(void) interrupt 3 using 1
  124. {
  125.   TH1=-5000/256;                  
  126.   TL1=-5000%256;                    //将5毫秒作为一个时间段
  127.   S++;                              //增加一个5毫秒
  128.   if(S==2400) {                     //如到12秒
  129.         num=N;                         //取出计数值
  130.     BG=1;                           //将更新显示数组
  131.     S=0;                            //5毫秒计数器归零
  132.     N=0;                            //转速计数器归零
  133.   }
  134. }

  135. //-------------------------------------------------------------------------------------------
  136. //** 显示画面之一 **
  137. //-------------------------------------------------------------------------------------------
  138. void Display1(void)
  139. {
  140.   V[0]=36;             //W
  141.   V[1]=44;             //e
  142.   V[2]=51;             //l
  143.   V[3]=42;             //c
  144.   V[4]=54;             //o
  145.   V[5]=52;             //m
  146.   V[6]=44;             //e
  147.   V[7]=10;             //(空)
  148.   V[8]=33;             //T
  149.   V[9]=54;             //o  
  150.   V[10]=10;            //(空)
  151.   V[11]=21;            //H
  152.   V[12]=44;            //e
  153.   V[13]=57;            //r
  154.   V[14]=44;            //e
  155. }

  156. //-------------------------------------------------------------------------------------------
  157. //** 显示画面之二 **
  158. //-------------------------------------------------------------------------------------------
  159. void Display2(void)
  160. {
  161.   V[0]=29;             //P
  162.   V[1]=51;             //l
  163.   V[2]=44;             //e
  164.   V[3]=40;             //a
  165.   V[4]=58;             //s
  166.   V[5]=44;             //e
  167.   V[6]=10;             //(空)
  168.   V[7]=62;             //w
  169.   V[8]=40;             //a
  170.   V[9]=48;             //i
  171.   V[10]=59;            //t
  172.   V[11]=10;            //(空)
  173.   V[12]=10;            //(空)
  174.   V[13]=10;            //(空)
  175.   V[14]=10;            //(空)
  176. }

  177. //-------------------------------------------------------------------------------------------
  178. //** 显示画面之三 **
  179. //-------------------------------------------------------------------------------------------
  180. void Display3(void)
  181. {
  182.   V[0]=31;               //R
  183.   V[1]=29;               //P
  184.   V[2]=26;               //M
  185.   V[3]=13;               //:
  186.   V[4]=10;               //(空)
  187.   num=num*5;           //因是按12秒为计数单位得到的数值, 按分钟的计数时还需乘5
  188.   do {                 //从低位到高位分别取得数字,放入缓冲区
  189.     bb=num/10;
  190.     aa=num-bb*10;
  191.     V[8-cc]=aa;
  192.     num=bb;cc++;
  193.   }while(num>0);
  194.   V[9]=10;               //(空)
  195.   V[10]=10;              //(空)
  196.   V[11]=10;              //(空)
  197.   V[12]=10;              //(空)
  198.   V[13]=10;              //(空)
  199.   V[14]=10;              //(空)
  200. }

  201. //-------------------------------------------------------------------------------------------
  202. //** 主程序 **
  203. //-------------------------------------------------------------------------------------------
  204. void main(void)
  205. {

  206.   unsigned char k;                  //循环变量
  207.       
  208.   TMOD=0x10;                        //使用定时器的方式

  209.   TH0=0; TL0=0;                     //初始化定时中断0
  210.   TR0=1; ET0=1;

  211.   TH1=0; TL1=0;                     //初始化定时中断1
  212.   TR1=1; ET1=1;

  213.   IT0=1; EX0=1;                     //初始化外部中断0

  214.   EA=1;                             //打开中断功能

  215.   Rt=1100;                          //设置LED显示1列的时间

  216.   BZ=0;                             //显示状态标志置0
  217.   
  218.   for(k=0;k<25;k++) V[k]=10;        //初始化显示数组

  219.   while(1)                          //进入主程序循环
  220.   {
  221.     if(BZ==0){         
  222.       Display1();        //显示开机画面"Welcome To Here"
  223.       if(S>1200) BZ=1;   //显示6秒后进入下一步显示
  224.     }

  225.     if(BZ==1){        
  226.       Display2();        //显示字符"Please wait"   
  227.       if(S>2200) BZ=2;   //开机11秒后,进入转速显示
  228.     }
  229.    
  230.     if((BG==1)&&(BZ==2)){   
  231.       Display3();         //显示转速
  232.       BG=0;cc=0;          //初始化变量
  233.         }
  234.   }
  235. }
复制代码



评分

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

查看全部评分

回复

使用道具 举报

ID:73209 发表于 2018-4-11 16:11 | 显示全部楼层
好东西啊好东西
回复

使用道具 举报

ID:73209 发表于 2018-4-16 11:09 | 显示全部楼层

好东西啊好东西
回复

使用道具 举报

ID:84652 发表于 2018-11-24 16:42 | 显示全部楼层
没有电子档的书么?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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