跪求单片机实验四位七段数码管显示程序!!!

编程在四位数码管上显示0123四个数字,每经过一秒四个数字循环左移一位显示,依次是0123,1230,2301,……无限往复…… 本人用的AT89S52单片机,使用的P1端口驱动数码管。 谢谢!!

第1个回答  2012-04-14
LZ还有好多东西没讲明白:
1.晶振多大?
2.数码管类型,共阳 ,共阴?
3.数码管 段选、位选 接口,P1到底是 属于哪个?另外一个又在哪里?
4.位选驱动电平,是 低电平驱动 还是 高电平 驱动 数码管 位选?
5.最高位(千位)位选对应哪个接口,最低位(个位)位选对应哪个接口?
第2个回答  2012-04-14
也不知道你的硬件怎么样、、、给你一个参考吧、、、
#include "STC12C5A.h" //包含头文件

/***数字编码表0~9***/
unsigned char const seg[10] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; //段选
unsigned char const position[]={1,2,4,8}; //位选
sbit HC595_SCK = P0^4;
sbit HC595_RCK = P0^5;
sbit HC595_RST = P0^6;
sbit HC595_DAT = P0^7;

//延时函数(24M晶振下延时1ms)
void delay_ms(unsigned int time)
{
unsigned int t;
for(;time>0;time--)
{
t = 1500;
while(t--);
}
}

//向HC595发送一个字节
void HC595_send_byte(unsigned char byte)
{
unsigned char i,temp;
for(i=0;i<=7;i++)
{
temp = byte&1<<i;
if(temp)
{
HC595_DAT = 1; //数据线
}
else
{
HC595_DAT=0;
}
//下面是写时序
HC595_SCK=1; //SCK(11脚)
HC595_SCK=0;
}
HC595_RCK=0; //RCK(12脚)
HC595_RCK=1;
}

//显示一个数num
void SMG_ShowNum(unsigned char num)
{
HC595_send_byte(seg[num]);
}

void SMG_Display(unsigned int dat)
{
SMG_ShowNum(dat/1000);
P0 = (P0&0xf0)|position[0];
delay_ms(2);

SMG_ShowNum((dat%1000)/100);
P0 = (P0&0xf0)|position[1];
delay_ms(2);

SMG_ShowNum(dat%100/10);
P0 = (P0&0xf0)|position[2];
delay_ms(2);

SMG_ShowNum(dat%10);
P0 = (P0&0xf0)|position[3];
delay_ms(2);
}

//主函数
void main()
{
unsigned int num=0;
unsigned char time=0;
P0=0X00; //初始化低四位为高电平,使能四位数码管
HC595_RST=0; //HC595的复位端,不能让它复位
while(1)
{
num = (num+1)%10000; //动态显示0~9999
time = 100;
while(time--)
SMG_Display(num);
}
}本回答被提问者采纳

跪求单片机实验四位七段数码管显示程序!!!
2.数码管类型,共阳 ,共阴?3.数码管 段选、位选 接口,P1到底是 属于哪个?另外一个又在哪里?4.位选驱动电平,是 低电平驱动 还是 高电平 驱动 数码管 位选?5.最高位(千位)位选对应哪个接口,最低位(个位)位选对应哪个接口?

求单片机驱动74hc164,四位7段数码管显示的C语言程序!
define uchar unsigned char define uint unsigned int uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x0};\/\/段码根据实际情况自编 sbit k1=P2^0;\/\/定义加加 sbit k2=P2^1;\/\/定义减减 sbit CLK=P3^6;\/\/164模拟时钟端 sbit DAT=P3^7;\/\/164模拟数据...

...要求89C51单片机实现4位7段数码管动态和静态显示,希望大神能给写个...
case 0x0d:num=1+4*num1;break;case 0x0b:num=2+4*num1;break;case 0x07:num=3+4*num1;break;} while(temp!=0xf0){ temp=P2;temp=temp&0xf0;} delay(5);while(temp!=0xf0){ temp=P2;temp=temp&0xf0;} } } num1++; P2=0xff;} \/\/数码管显示 void display(char z[],...

如何利用单片机让4位数码管显示?
display(1,2,3,4);\/\/主程序始终调用数码管显示子程序 } } void display(uchar a,uchar b,uchar c,uchar d){ P2=0xef;\\t P0=table[a];\/\/给第一个数码管送"a"delay(1);\/\/延时1ms P2=0xdf;P0=table[b];\/\/给第二个数码管送"b"delay(1);\/\/延时1ms P2=0xbf;P0=table[c];\/\/...

求救,单片机at89c51 用四位七段数码管怎么样动态显示一个数字,我的不...
0;P2 = dcode[n \/ 100 % 10]; c = 1; delay1ms(10); c = 0;P2 = dcode[n \/ 10 % 10]; b = 1; delay1ms(10); b = 0;P2 = dcode[n % 10] ; a = 1; delay1ms(10); a = 0;} } P2用共阳的数码管。单片机c51 用四位七段数码管动态显示一个数字。

51单片机如何利用4个七段数码管采用动态显示显示4位数字,如2035?_百度...
不停地利用人的视觉暂留,在一个合适的速度下依次显示1个2,1个0,1个3,1个5.当显示一个“2”的时候,其他三位都是空的,以此类推。但人眼是看不到短时间内这些变化的,假如这个行为不断循环,那么人看到的就是“2035”,而不是单个的数字。比如说吧:...P1=num[2]; \/\/假设num[2]是...

四位七段LED数码管显示
引脚1-7是让他那7段显示的,分别对应一个段 10-13是片选 1:e 2:d 3:Ca 4:c 5:Dp 6:b 7:a 8:Ca 9:f 10:g

求单片机按键控制四位数码管显示电路和程序,7个按键按下,四位数码管...
MOV 63H, #7 LCALL DISP ;调用显示子程序 显示7777 LLL: SJMP LL1 DISP: MOV R0,#60H ;指针指向显示缓冲区 MOV R7,#4 ;设循环显示的次数 显示4位数据 CLR C MOV R6,#00000001B ;从p2.0开始显示 即先显示1 LL: MOV DPTR,#TAB...

共阴极7段数码管显示C程序
单片机7段数码管动态显示程序代码及其说明如下:include <reg51.h> include <intrins.h> include<math.h> unsigned char data dis_digit; \/\/dis_digit---位选通值, 传送到P2口用于选通当 \/\/前数码管的数值, 如等于0xfe时,选通P2.0口数码管 unsigned char code dis_code[11]={0xc0,0xf9,...

求一个7段数码管的显示程序
公共极直接接VCC 单片机控制其他引脚 include<reg51.h> define smg P2 unsigned char tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};void main(){ smg=tab[0];} \/\/程序就到这里 tab[]这个中括号里面的数字可以随意为0-9 数码管显示为对应的数字 在前面的数组中已经...

相似回答
大家正在搜