找回密码
 立即注册

QQ登录

只需一步,快速开始

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

89c52,不用锁存器的数码管,如何编出动态显示的程序

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela1=P2^0;
sbit wela2=P2^1;
sbit wela3=P2^2;
sbit wela4=P2^3;
sbit wela5=P2^4;
sbit wela6=P2^5;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
                    0x99,0x92,0x82,0xf8,
                                        0x80,0x90,0x88,0x83,
                                        0xc6,0xa1,0x86,0x8e};
void delay(uint);
void main()
{
        while(1)
        {
                wela1=0;
             P0=table[0];
             delay(5);
        wela1=1;

                wela2=0;
             P0=table[1];
             delay(5);
             wela2=1;

                wela3=0;
             P0=table[2];
             delay(5);
             wela3=1;

                wela4=0;
             P0=table[3];
             delay(5);
             wela4=1;

                wela5=0;
             P0=table[4];
             delay(5);
             wela5=1;

                wela6=0;
             P0=table[5];
             delay(5);
             wela6=1;
        }
}
void delay(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

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

使用道具 举报

沙发
ID:330198 发表于 2018-5-22 09:45 | 只看该作者
你现在的程序不是常量嘛,用一个变量tab[n],n变化就能动态显示了
回复

使用道具 举报

板凳
ID:296634 发表于 2018-5-22 10:23 | 只看该作者
#include<reg51.h> #define SEG P0 unsigned char SMGD[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98}; //共阳极 段显0~9 unsigned char SMGW[]={0x01,0x02,0x04,0x08};        //位选1~4    void delay(unsigned int i)         //延时函数 {         while(i--); }  void main(void)         //主函数 {          unsigned char Temp;                 while(1)         {                 switch (Temp%4)                 {                                                   case 0:P0 = SMGD[Temp%10];break;                         case 1:P0 = SMGD[Temp%10];break;                         case 2:P0 = SMGD[Temp%10];break;                         case 3:P0 = SMGD[Temp%10];break;                                  }                 P2 =SMGW[Temp%4];                 Temp++;                 delay(50000);          } }
回复

使用道具 举报

地板
ID:137653 发表于 2018-5-22 11:53 | 只看该作者
显示第一个字,然后清除,然后显示第二个,如此循环就行
回复

使用道具 举报

5#
ID:213173 发表于 2018-5-22 20:45 | 只看该作者
使用锁存主要是为了达到I/O口复用的目的,节省I/O口。如果I/O口够用当然可以不用锁存器。示例如下:

#include <AT89X51.H>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar code table1[]={
        0x01,0x02,0x04,0x08,
        0x10,0x20,0x40,0x80};
void delay(uint k)
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=114;j>0;j--);
}
void main()
{
        uchar i=0;
        while(1)
        {
                for(i=0;i<8;i++)
                {
                        P0=0xff;
                        P2=table1;
                        P0=table;
                        delay(1);
                }
        }
}


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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