找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数码管和定时设计的程序设计

[复制链接]
ID:868264 发表于 2020-12-26 15:11 | 显示全部楼层 |阅读模式
利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出"HELLO"。到此保持住。
设晶振频率为12MHz。
51hei图片_20201226150148.jpg
单片机运行过程已经上传,以下是代码
  1. #include<reg52.h>  //52单片机头文件
  2. #include <intrins.h> //包含有左右循环移位子函数的库
  3. #define uint unsigned int    //宏定义
  4. #define uchar unsigned char  //宏定义
  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. uchar code table[]={   //显示数据编码
  8. 0x3f,0x06,0x5b,0x4f,
  9. 0x66,0x6d,0x7d,0x07,
  10. 0x7f,0x6f,0x77,0x7c,
  11. 0x39,0x5e,0x79,0x71,
  12. 0x76,0x79,0x38,0x3f,0};
  13. uchar temp,t0,t1,bai,shi,ge,flag,flag1;
  14. uint shu;
  15. void init();              //函数声明
  16. void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);
  17. void delay(uint z)     //延时子函数
  18. {
  19.         uint x,y;
  20.         for(x=z;x>0;x--)
  21.                 for(y=110;y>0;y--);
  22. }
  23. void main()          //主函数
  24. {
  25.         init();
  26.         while(1)
  27.         {
  28.                 if(flag1!=1)   //如果flagi不再等于1则显示数据
  29.                         display(7,6,5,bai,shi,ge);
  30.                 else
  31.                         display(16,17,18,18,19,20);          //否则显示hello
  32.         }
  33. }

  34. void init()          //初始化函数
  35. {
  36.         shu=432;
  37.         temp=0xfe;
  38.         P1=temp;
  39.         TMOD=0x11;
  40.         TH0=(65536-50000)/256;  //定时器初始化
  41.         TL0=(65536-50000)%256;
  42.         TH1=(65536-50000)/256;
  43.         TL1=(65536-50000)%256;
  44.         EA=1;
  45.         ET0=1;
  46.         ET1=1;
  47.         TR0=1;
  48.         TR1=1;
  49. }

  50. void timer0() interrupt 1   //定时器0中断
  51. {
  52.         TH0=(65536-50000)/256;
  53.         TL0=(65536-50000)%256;
  54.         t0++;
  55.         if(flag!=1)          //flag不等于1时进行流水灯
  56.                 {
  57.                 if(t0==10)
  58.                         {
  59.                                 t0=1;
  60.                                 temp=_crol_(temp,1);
  61.                                 P1=temp;
  62.                         }
  63.                 }
  64.         else              //否则进行灯闪烁
  65.                 {
  66.                         if(t0%4==0)  //小灯每200毫秒变化一次
  67.                                 P1=~P1;
  68.                         if(t0==60)
  69.                         {
  70.                                 TR0=0;   //3秒后关闭定时器0,关闭灯,并置flag=1
  71.                                 P1=0xff;
  72.                                 flag1=1;
  73.                         }
  74.                 }        
  75. }

  76. void timer1() interrupt 3  //定时器1中断函数
  77. {
  78.         TH1=(65536-50000)/256;
  79.         TL1=(65536-50000)%256;
  80.         t1++;
  81.         if(t1==2)
  82.                 {
  83.                         t1=0;
  84.                         shu--;
  85.                         bai=shu/100;
  86.                         shi=shu%100/10;
  87.                         ge=shu%10;
  88.                         if(shu==398)    //当到398时把原来T0中的数清除,重新加裁初值让小灯闪烁
  89.                                 {
  90.                                         TR0=0;
  91.                                         TH0=(65536-50000)/256;
  92.                                         TL0=(65536-50000)%256;
  93.                                         TR0=1;
  94.                                         flag=1;
  95.                                         t0=0;
  96.                                         P1=0xff;
  97.                                         TR1=0;
  98.                                 }        
  99.                 }        
  100. }

  101. void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) //显示子函数
  102. {
  103.         dula=1;
  104.                 P0=table[aa];
  105.                 dula=0;
  106.                 P0=0xff;
  107.                 wela=1;
  108.                 P0=0xfe;
  109.                 wela=0;
  110.                 delay(1);

  111.                dula=1;
  112.                 P0=table[bb];
  113.                 dula=0;
  114.                 P0=0xff;
  115.                 wela=1;
  116.                 P0=0xfd;
  117.                 wela=0;
  118.                 delay(1);

  119.        dula=1;
  120.                 P0=table[cc];
  121.                 dula=0;
  122.                 P0=0xff;
  123.                 wela=1;
  124.                 P0=0xfb;
  125.                 wela=0;
  126.                 delay(1);
  127.         dula=1;
  128.                 P0=table[bai];
  129.                 dula=0;
  130.                 P0=0xff;
  131.                 wela=1;
  132.                 P0=0xf7;
  133.                 wela=0;
  134.                 delay(1);

  135.                 dula=1;
  136.                 P0=table[shi];
  137.                 dula=0;
  138.                 P0=0xff;
  139.                 wela=1;
  140.                 P0=0xef;
  141.                 wela=0;
  142.                 delay(1);

  143.                 dula=1;
  144.                 P0=table[ge];
  145.                 dula=0;
  146.                 P0=0xff;
  147.                 wela=1;
  148.                 P0=0xdf;
  149.                 wela=0;
  150.                 delay(1);
  151. }
复制代码



评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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