求单片机实验七段数码管显示实验程序

求单片机实验七段数码管显示实验程序,第1张

/ ch03-3-4c - 七段LED数码管实验程序 /

//==声明区=================================================

#include<reg51h> //定义8051寄存器的头文件,P2-17~19

#define SEG P0 //定义七段LED数码管接至Port 0

/声明七段LED数码管驱动信号数组(共阳)/

char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4

0x92,0x83,0xf8,0x80,0x98}; //数字5-9

void delay(int); //声明延迟函数

//==主程序==========================================

main() //主程序开始

{ unsigned char i; //声明无符号变量i

while(1) //无穷循环,程序一直跑

for(i=0;i<10;i++) //显示0-9,共10次

{ SEG=TAB[i]; //显示数字

delay(500); //延迟500×1m=05秒

} //for循环结束

} //主程序结束

//==子程序==========================================

/ 延迟函数,延迟约x×1ms /

void delay (int x) //延迟函数开始

{ int i,j; //声明整形变量i,j

for (i=0;i<x;i++) //计数x次,延迟x×1ms

for (j=0;j<160;j++); //计数120次,延迟1ms

} //延迟函数结束

用动态显示的方法来做

在定时中断中,分别对每个数码管显示一次,也可以用延时来做,你若只是单单看个效果那就用延时来做吧

亮第一个数码管(这里当他为共阳极数码管):

P2^0=1;

P1=XXX;//自己写出L的字形码

delay_ms(1);//延迟1ms这个时间越小越好拉

P2^0=0;//关掉第1个数码管显示

P2^1=1;//开始第二个数码管显示

//然后就以此类推,3个,4个甚至8个数码管这样子写

- -!

这样:

1/首先把段码端和片选端都设为输出,也就是led和单片机连的那几个角

2/你先用延时来做吧,大致是这样的

设一个片选有效;

把要显示的内容放段码中;

延时15ms;

设第二个片选有效;

把要显示的内容放段码中;

延时15ms;

直到4个都ok

#include "STC12C54H"

#define uchar unsigned char

#define uint unsigned int

#define dataport P1//P1直接驱动数码管的8个阳极

sbit wei1=P3^3;//再有三个管脚接3个三极管驱动数码管的阴极

sbit wei2=P3^4;

sbit wei3=P3^5;

uint a=0;//中断次数计数,一次50ms,20次为1 秒

//共阴数码管七段码

uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延时子程序

void delay1ms(uint t)

{

uint i,j,k;

for(i=t;i>0;i--)

for(j=15;j>0;j--)

for(k=27;k>0;k--);

}

//显示子程序

void display(uint n)

{

uchar a1,a2,a3;

a1=n/100%10;

a2=n/10%10;

a3=n%10;

wei1=1;

dataport=TABLE[a1];

delay1ms(1);

wei1=0;

dataport=0x80|TABLE[a2];//这里多个小数点

delay1ms(1);

wei3=1;

dataport=TABLE[a3];

delay1ms(1);

wei3=0;

}

void init(void)

{

TMOD=0X01;

TH0=(655536-50000)/256;//定时50ms

TL0=(655536-50000)%256;

EA=1;

ET0=1;

TR0=1;

P1M0=0;

P1M1=0xff;//P1口设为推挽输出,驱动能力强

P3M0=0;

P3M1=0x38;//P33P34 P35口设为推挽输出

}

void main(void)//主程序

{

init();//初始状态设定

while(1)

{

display(a/2);//显示计数值,以十分之一秒为单位

}

}

void timer0(void)interrupt 1//中断子程序

{

TH0=(655536-50000)/256;

TL0=(655536-50000)%256;

a++;

if(a==1980)a=0;//1980次是99秒

}

以上就是关于求单片机实验七段数码管显示实验程序全部的内容,包括:求单片机实验七段数码管显示实验程序、利用51单片机控制3个LED数码管在3个数码管上显示字符LED,怎样编写程序、用51单片机控制4位led数码管,使其显示出想要的数字,程序怎样写,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9359099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存