找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求大神指点一下 用74hc595和中断驱动 一位数码管; 帮忙给看下 万分感谢

[复制链接]
跳转到指定楼层
楼主

求大神指点一下   用74hc595和中断驱动 一位数码管;  帮忙给看下  万分感谢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit CP = P2^0;
sbit DA = P2^1;
sbit LE = P2^2;
uchar sec,a,b;
uchar code seg[] = {
    0xc0, 0xf9, 0xa4, 0xb0, 0x99,
    0x92, 0x82, 0xf8, 0x80, 0x10};
uchar dis_buff[1] = {0};
void write_595(uchar dat)//д??595
{
    uchar i;
    for(i = 0; i < 8; i++) {
      DA = dat & 0x80;
    CP = 0;
       CP = 1;
    dat <<= 1;
    }
}
void update(uchar sec) //
{  
   dis_buff[0] =seg[sec];     // sec ????1????????????????
}
void display()
{
  write_595(dis_buff[0]);  //dis_buff[0] ?е????  ????write_595;
  LE = 0;
  LE = 1;      //?????????????
}

void timer0_isr() interrupt 1   //?ж??????????
{  
TMOD = 0X01;
    TH0 = 0x4c;
EA = 1;
ET0 = 1;
TR0 = 1;
    a++;
if(a%5==0)
{
b = ~b;
update(); //??sec ????dis_buff[0]?У? ???磺sec = 1?  ??浽dis_buff[0]???У?
}      //???
    if(a == 20)
  {
  display(); //dis_buff[0] ?е????  ????write_595;
      a = 0;
   sec++;   
   }
   if(sec==9) sec = 0;  
    }



void timer0_init(void)
{
    TMOD = 0x01;//T0??????1
    TH0 = 0x4c; //50ms@11.0592MHz
    EA = 1;
ET0 = 1;
TR0 = 1;
}

void  main()
{
tiemr0_init();
while(1);
}


单位数码管驱动.rar

26.12 KB, 下载次数: 5

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

使用道具 举报

沙发
ID:213173 发表于 2020-10-26 08:19 | 只看该作者
赘句多,语句顺序不当。给你整理后运行正常。你仔细对比一下就能明白问题所在。

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit CP = P2^0;
  5. sbit DA = P2^1;
  6. sbit LE = P2^2;

  7. uchar sec,a;
  8. uchar code seg[] = {
  9.     0xc0,0xf9,0xa4,0xb0,0x99,
  10.          0x92,0x82,0xf8,0x80,0x90};

  11. void write_595(uchar dat)
  12. {
  13.         uchar i;
  14.         for(i = 0; i < 8; i++)
  15.         {
  16.                 DA = dat&0x80;
  17.                 CP = 0;
  18.                 CP = 1;
  19.                 dat <<= 1;
  20.         }
  21.         LE = 0;
  22.         LE = 1;
  23. }

  24. void timer0_isr() interrupt 1
  25. {  
  26.         TH0=0x4c;
  27.         TL0=0x00;
  28.         a++;
  29.         if(a == 20)
  30.         {
  31.                 a = 0;
  32.                 sec++;   
  33.         }
  34.         if(sec>9) sec = 0;  
  35.         write_595(seg[sec]);
  36. }

  37. void timer0_init(void)
  38. {
  39.         TMOD = 0x01;
  40.         TH0 = 0x4c; //50ms@11.0592MHz
  41.         TL0 = 0x00;
  42.         EA  = 1;
  43.         ET0 = 1;
  44.         TR0 = 1;
  45. }

  46. void  main()
  47. {
  48.         timer0_init();
  49.         while(1);
  50. }
复制代码



回复

使用道具 举报

板凳
ID:519743 发表于 2020-10-26 11:24 | 只看该作者
wulin 发表于 2020-10-26 08:19
赘句多,语句顺序不当。给你整理后运行正常。你仔细对比一下就能明白问题所在。

好的  谢谢 我先看一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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