找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机P1^0口led改变状态,产生脉冲,T0计数加一数码管显示,T1定时

[复制链接]
跳转到指定楼层
楼主
ID:436030 发表于 2018-11-29 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机问题求助,P1^0口led改变状态,产生脉冲,T0计数加一数码管显示,T1定时数码管,正常显示不了,改了好几次,不知道哪里错了,求助,谢谢

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit led=P1^0;                //用杜邦线连接p1^0和p3^4
  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8. uchar code table[]=(0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f);                //0~9
  9. void delay(uint j)
  10. {
  11.         uint m,n;
  12.         for(m=j;m>0;m--)
  13.         for(n=125;n>0;n--);
  14. }
  15. void display(uchar i)
  16. {                                                                                 
  17.         uchar bai,shi,ge;
  18.         bai=i/100;
  19.         shi=i%100/10;
  20.         ge=i%10;
  21.     P0=0xff;
  22.         wela=1;
  23.         P0=0xfe;
  24.         wela=0;        


  25.     dula=1;
  26.         P0=table[bai];
  27.         dula=0;
  28.         delay(1);


  29.         P0=0xff;
  30.         wela=1;
  31.         P0=0xfd;
  32.         wela=0;

  33.         
  34.         dula=1;
  35.         P0=table[shi];
  36.         dula=0;
  37.         delay(5);

  38.         
  39.         P0=0xff;        
  40.         wela=1;
  41.         P0=0xfb;
  42.         wela=0;
  43.         
  44.         dula=1;
  45.         P0=table[ge];
  46.         dula=0;
  47.         delay(5);
  48. }
  49. void t0Init() //
  50. {
  51.            TR0=1;  
  52.             
  53.         TMOD |=0x05;                        //实现计数功能
  54.         TH0=0;
  55.         TL0=0;
  56. }
  57. void t1Init()
  58. {
  59.         TR1=1;        
  60.         TMOD |=0x10;
  61.          TH1=0x4b;         //定时50ms
  62.         TL1=0xfd;
  63. }
  64. void main()          //main函数自身会循环
  65. {
  66.         uchar mSec;        //毫秒和秒储存变量
  67.            t0Init() ;
  68.     t1Init() ;
  69.         TH0=0;
  70.         TL0=0;
  71.         while(1)
  72.         {            
  73.                 if(TF1==1)
  74.                 {                        //判断是否溢出
  75.                         TF1=0;                //软件清零溢出标志位
  76.                         TH1=0x4b;         //定时50ms
  77.                 TL1=0xfd;
  78.                     mSec++;
  79.                         if(mSec==10)
  80.                          {
  81.                                 mSec=0;
  82.                             led=~led;        //产生方波                                
  83.                          }
  84.                                 
  85.                 }
  86.                         
  87.                         display(TL0);//数码管显示函数
  88.         }
  89. }
复制代码


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

使用道具 举报

沙发
ID:213173 发表于 2018-11-30 09:23 | 只看该作者
你的数组括号用错了,另外动态数码管显示程序也有缺陷,亮度不均匀。给你改了下,你试试。

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;                //用杜邦线连接p1^0和p3^4
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9
/*
void delay(uint j)
{
        uint m,n;
        for(m=j;m>0;m--)
                for(n=125;n>0;n--);
}*/
void display(uchar i)
{                                                                                 
        static uchar a=0;
//        uchar bai,shi,ge;
//        bai=i/100;
//        shi=i%100/10;
//        ge=i%10;
        P0=0x00;
        switch(a)
        {
                case 0:
                        P0=0xfe;
                        wela=1;
                        wela=0;
                        P0=table[i/100];
                        dula=1;
                        dula=0;
                        a++;
                break;

                case 1:
                        P0=0xfd;
                        wela=1;
                        wela=0;
                        P0=table[i%100/10];
                        dula=1;
                        dula=0;
                        a++;
                break;
                case 2:
                        P0=0xfb;
                        wela=1;
                        wela=0;
                        P0=table[i%10];
                        dula=1;
                        dula=0;
                        a=0;
                break;
        }
}
void t0Init() //
{
        TMOD |=0x05;     //实现计数功能
        TH0=0;
        TL0=0;
        TR0=1;
}
void t1Init()
{        
        TMOD |=0x10;
        TH1 = 0xEC;                 //定时5ms
        TL1 = 0x78;
        TR1=1;
}
void main()          //main函数自身会循环
{
        uchar mSec;        //毫秒和秒储存变量
        t0Init() ;
        t1Init() ;
        TH0=0;
        TL0=0;
        while(1)
        {            
                if(TF1==1)
                {                        //判断是否溢出
                        TF1=0;                //软件清零溢出标志位
                        TH1 = 0xEC;                 //定时5ms
                        TL1 = 0x78;
                        mSec++;
                        if(mSec==100)
                        {
                                mSec=0;
                                led=~led;        //产生方波                                
                        }
                        display(TL0);//数码管显示函数
                }       
        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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