一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4755|回复: 11
收起左侧

[51单片机] 最近刚学51单片机,做了个5个IO驱动六位数码管的小程序

[复制链接]
发表于 2012-6-4 22:25 | 显示全部楼层 |阅读模式
最近刚学51单片机,做了个5个IO驱动六位数码管的小程序,先贴图:
未命名.jpg
发表于 2012-6-5 09:09 | 显示全部楼层
楼主好厉害,学了多长时间入门的,是自学的吗
 楼主| 发表于 2012-6-5 13:43 | 显示全部楼层
嗯嗯,自学的,白天上班,晚上才搞一会儿,才不到一个月吧,前年搞过一阵子,没怎么搞明白,这不又从头再来
发表于 2012-6-10 10:32 | 显示全部楼层
我怎么就自学几年都没学会,你却一个月就学会了,差别好大呀
发表于 2012-6-28 19:54 | 显示全部楼层
可不可以不用595,直接驱动数码管?
发表于 2012-6-28 21:14 | 显示全部楼层
可以的吧?
只是要多用IO口
 楼主| 发表于 2012-6-29 00:09 | 显示全部楼层
前面上的图用了5个IO,实际上只用3个IO就够了,比较省资源
发表于 2012-7-6 07:43 | 显示全部楼层
程序上来看看,学习下。
 楼主| 发表于 2012-7-6 13:46 | 显示全部楼层
回复 8# 社建电子


    重新改了下,用3个IO,

仿真图片如下:
未命名.jpg


程序代码如下:

74HC595驱动数码管.rar (80.46 KB, 下载次数: 1121)

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SRCK=P3^0;   //上升沿时数据寄存器移位
sbit RCK=P3^1;   //上升沿时数据进入数据存储寄存器,锁定输出,下降沿时不变
sbit SI=P3^3;   //75HC595串行输入线
sbit P3_7=P3^7;   //定义位选择数据线

uint t,shu;
uchar c,a;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管编码
//uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //流水灯编码
//uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管编码
   
uchar code weixuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

uchar wei[]={0,0,0,0,0,0};
/******************************************************/
void delay(uint z)
{
uint y,x;
for(y=z;y>0;y--)
for(x=110;x>0;x--);
}
/******************************************************/
void delay_us(uint z)
{
uint y,x;
for(y=z;y>0;y--)
for(x=1;x>0;x--);
}
/********************************************************
说明:74HC595串行数据写入子函数
/*******************************************************/
void write_595(uchar temp)
{
uchar i;
for(i=8;i>0;i--)
{
  SRCK=0;
  SI=temp&0x01;
  SRCK=1;
  temp>>=1;
}
}

/******************************************************/
void init()
{
    TMOD=0x02;                //定时器0,16位工作方式
TH0=0x06;     //赋初值
TL0=0x06;            
TR0=1;                   //启动定时器0
ET0=1;                    //打开定时器0中断
EA=1;                     //打开总中断
}

/*****************************************************/
void main()
{
uchar i;
init();
while(1)
{
  for(i=0;i<4;i++)
  {
   write_595(weixuan);
   write_595(table[wei]); //写入显示数据
   RCK=1;
   RCK=0;
   delay(10);
  }
}
}

timer0() interrupt 1      //定时器0中断服务程序
{   
t++;

  if(t==1000)
  {
   t=0;    //清零
   shu++;
   if(shu==5000)
   shu=0;


   wei[0]=shu%10;
   wei[1]=shu%100/10;
   wei[2]=shu%1000/100;
   wei[3]=shu%10000/1000;
  }
}
发表于 2012-7-6 14:30 | 显示全部楼层
595一直没弄懂。。。。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-6-2 21:33 , Processed in 0.066240 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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