登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看3774|回0|收藏
楼主 ID:159255 只看他
2017-1-1 21:13
简单计算器
0.png

代码:

  1. //12M晶振。4位共阴数码管,P0 段码,P2.0~P2.3 位控
  2. //显示 00.00~99.99  
  3. //2011 07 07   E:\DPJ_C\00.00\00.00.c

  4. #include <reg51.h>
  5. #define uchar unsigned char
  6. sbit P20=P2^0;
  7. sbit P21=P2^1;
  8. sbit P22=P2^2;
  9. sbit P23=P2^3;

  10. sbit P27=P0^7;
  11. sbit KS=P1^0; //开始
  12. sbit KR=P1^1; //复位

  13. uchar time,xs,ge,shi,bai,qian;
  14. uchar code tab[ ]=        {        
  15.                                         0x3F,/*0*/
  16.                                 0x06,/*1*/
  17.                                 0x5B,/*2*/
  18.                                 0x4F,/*3*/
  19.                                 0x66,/*4*/
  20.                                 0x6D,/*5*/
  21.                                 0x7D,/*6*/
  22.                                 0x07,/*7*/
  23.                                 0x7F,/*8*/
  24.                                 0x6F,/*9*/
  25.                                         };

  26. void delay_ms(unsigned int ms)  //1ms延时
  27. {
  28.            uchar a;
  29.            while(ms--)
  30.         for(a=123;a>0;a--);
  31. }
  32.   
  33. void display();

  34. void T0intinit( )        //定时器T0初始化
  35. {
  36.         TMOD=0x01;
  37.         TH0=(65536-10000)/256;       //10ms定时
  38.         TL0=(65536-10000)%256;
  39.         EA=1;
  40.         ET0=1;
  41. }

  42. void main()
  43. {         
  44.         T0intinit( );
  45.         while(1)
  46.         {         
  47.                 display( );
  48.                 while(!KS)            //开始/暂停 键
  49.                 {           
  50.                         display( );
  51.                         if(KS)
  52.                         TR0=!TR0;
  53.                 }
  54.                
  55.                 while(!KR)         //清零键
  56.                 {
  57.                         display( );
  58.                         if(KR)
  59.                         TR0=0;
  60.                         qian=0;
  61.                         bai=0;
  62.                         shi=0;
  63.                         ge=0;
  64.                 }
  65.                 if(bai==10)
  66.                 {
  67.                         bai=0;
  68.                         qian++;
  69.                 }
  70.                 if(qian==10)
  71.                 {
  72.                         qian=0;
  73.                         TR0=0;
  74.                 }
  75.         }
  76. }


  77. void display( )
  78. {
  79.         P23=0;
  80.         P0=tab[ge];
  81.         delay_ms(1);
  82.         P23=1;
  83.         P22=0;
  84.         P0=tab[shi];
  85.         delay_ms(1);
  86.         P22=1;
  87.         P21=0;
  88.         P0=tab[bai]|0x80;
  89.         delay_ms(1);
  90.         P21=1;
  91.         P20=0;
  92.         P0=tab[qian];
  93.         delay_ms(1);
  94.         P20=1;
  95. }

  96. void T0int( ) interrupt 1 //定时器T0中断 方式1
  97. {
  98.         TH0=(65536-10000)/256;       //重装10ms定时常数
  99.         TL0=(65536-10000)%256;
  100.         ge++;
  101.                 if(ge==10)
  102.                 {
  103.                         ge=0;
  104.                         shi++;
  105.                 }
  106.                 if(shi==10)
  107.                 {
  108.                         shi=0;
  109.                         bai++;
  110.                 }
  111. }


0.png
所有资料下载:
00.00数字秒表仿真.zip (20.68 KB)
(下载次数: 18, 2017-1-1 21:12 上传)

下载积分: 黑币 -5



51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版