当前位置:首页 » 编程语言 » c语言动态数码管

c语言动态数码管

发布时间: 2023-05-11 20:21:35

c语言动态数码管显示学号的后六位,同时运行流水灯

unsigned char num[6];
unsinged char numi;

writenum(unsigned char i, unsigned char num)
{
num[i] = num;

}
定时中断()
{
位选端裂冲口 = 0;

段选端口 = num[numi];

位肆姿歼选端口 = 1<册雹<numi;

numi++;

if(numi > 5)

numi = 0;

}

❷ 求用c语言写的八位数码管动态显示程序,P0控制段,P2控制位。

#include"reg51.h"
#include "intrins.h" //_nop_();延老拿时函数用
#define uchar unsigned char
#define uint unsigned int
#define SEG_OUT P0 //段码输出口
#define BIT_OUT P2 //扫描口
sbit dot=P2^7; //LED小数点控制
uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */
uchar data dis_buff[8]={1,2,0,0,0,0}; //待显示单元数据,共6个数据
unsigned long temp;
/*************1毫秒延时程序**************/
delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<侍亏搭120;j++)
;
}
//
/***********LED显空友示动态扫描函数**********/
display()
{
char k;
char m=0xfe;
for(k=0;k<8;k++) //8位LED扫描控制
{ BIT_OUT=0xff;
SEG_OUT=tab[dis_buff[k]];
BIT_OUT=m;
delay1ms(3);
m=(m<<1)|0x01;

}
dis_buff[0]=temp/10000000;

dis_buff[1]=(temp%10000000)/1000000;
dis_buff[2]=(temp%1000000)/100000;
dis_buff[3]=(temp%100000)/10000;
dis_buff[4]=(temp%10000)/1000;
dis_buff[5]=(temp%1000)/100;
dis_buff[6]=(temp%100)/10;
dis_buff[7]=temp%10;
}
/**************初始化程序****************/
void initiation()
{
TMOD=0x01;
TH0=-10000/256;
TL0=-10000%256; //10MS定时初值(T0计时用)
ET0=1;
TR0=1;
EA=1;
}

/****************定时器0中断服务程序*****/
void init_timer0(void) interrupt 1
{
TH0=-10000/256;
TL0=-10000%256; //10MS定时初值(T0计时用)
t10ms++;
if(t10ms==100)
{
t10ms=0;
ts++;
if(ts==60)
{
temp++;
ts=0;
}
}
}
/****************主程序******************/
main()
{
initiation();
while(1)
{
display();
}
}
一秒加1

❸ C语言单片机代码 数码管动态显示

这里的16个元素代表的是袭亏从十六进制数0~9、A、B、C、D、E、F的段码,根据什么来填这些数组元素?那就要看你设计程序时定义数组的作用拍袭神才能确定.table[1]对应的元素为0x06,是十六进制数,转换成二进制数是00000110B,分别对应于数禅李码管的Dp、g、f、e、d、c、b、a
脚,所以在共阴数码管上点亮b、c两段,显示的是数字1,其它同理。

❹ C语言单片机代码 数码管动态显示

你这数组里面16组数分别为0~f的共阴数码管的编码,你说只需要数码管显示0~6,那么多余的就兆仿没有用到,或者 在别的函数里面有用到 你仔细看你的程序……
P0=table[1],意思就是说 往P0里面送table这组数里面的第2个数也就是0x06,0x06正好是共坦答阴数码管显示1的编码。所以数码管就会显示1,同理 table[2]就是显示2的编码,需要注意的是table[0]指定的是table里面的第族信纤一个数。

❺ c语言,动态数码管显示1234,程序怎么写,请那个哥哥帮忙一下谢谢。。

不知道你 是那种c环境,大概思路如下,
selcet,output 改为你的具体环境凳慎下的函数。

int i=1;
char [4]={0xf9,0xa4,0xb0,ox66};//输茄做出1.2,3,4 相应
的字符值,共阳 极
while()
{
for( i=0;i<4;i++) // 动态显示就是不停的循环逐个显

{
selcet(i); //选择第i 个 灯来显示,
output(char[i]);//输颤粗衡出1 还是2,3,4 字符

}

❻ 用4个动态数码管显示,实现0~9999计数功能,延时为1s,用c语言。

/***数显秒表,范围0~9999***/
/***源程序默认硬件环境:52单片机,12MHz晶振,4位共阳数码管,P0 口段选,P10~P13 高电平位选(NPN三极管驱动),P13为最高位数码管***/
#include"reg52.h" //包含52头文件
#define TRUE 1 //定义布尔量'1':真
#define FALSE 0 //定义布尔量'0':假
#define uchar unsigned char //定义 无符号字符型数据 简称
#define uint unsigned int //定义 无符号整型数据 简称
#define th0 0xfc
#define tl0 0x18 //1ms at 12MHz(定时器工作模式1 状态)
#define SEG_Num 4 //数码管位数
#define SEG_Data P0 //数码管段驱动接口
#define SEG_En P1 //数码管位驱动接口
#define SEG_AllOff (SEG_En&=0xf0) //关闭所有数码管(位驱动)
#define DisTimeAt1msCount 4 //单'位'数码管显示时间,数码管刷新频率f=1/(N×t),其中 N为数码管位数, t为单'位'数码管显示时间
#define T1sAt1msCount 1000 //1秒 计数值漏局(在定时器为1ms 情况下计数)
#define TimesEnd 10000 //显示内容范围 0~9999
uchar code SEG_B_List[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管代码表"0-9"
uint Sec;
uchar bdata Flag=1;
sbit DisplayFlag=Flag^0; //显示标志位
sbit TimesUpFlag=Flag^1; //时间更新标志位
void Timer0() interrupt 1 //定时器0中断函数
{
static uchar t1ms; //定义静态变量 t1ms 定时计数寄存空间
static uint t1ms_sec;
TL0=tl0;
TH0=th0; //重赋 1ms 定时初值
t1ms=++t1ms%DisTimeAt1msCount; //先纤搜歼计数值加1,后对计数范围进行限制0~(DisTimeAt1msCount-1)
if(!t1ms) DisplayFlag=TRUE; //若定时计数值归0,则表示计数值曾到达 单'位'显示时间(DisTimeAt1msCount),显示标志 置位
t1ms_sec=++t1ms_sec%T1sAt1msCount; //在 T1sAt1msCount(1000) 范围内加1
if(!t1ms_sec) TimesUpFlag=TRUE; //若 归0,则1s 时间到,时间更新标志位 置位
}
void SystemInit() //系统初始化函数
{
TMOD=0x01; //关闭定时器1,开启定时器0,且工作在模式1(16位定时器)
TH0=th0;
TL0=tl0; //装定时初值(1ms at 12MHz)
TR0=1; //启动计时
ET0=1; //允许定时器0中断
EA=1; //开启系统中断功能
}

float Pow_Self(float x,uint y)//自编简易 x 的 y 次方函数,y只能是 非负整数
{
float sum;
if(x==0 && y==0) return; //0 的 0 次方无意义
else if(x==0) sum=0; //可有可无,y!=0的情况已经包含x=0,不加不影响结果,但影响运算速度
else if(y==0) sum=1; //除上述情况毁冲外,任何数的 0 次方均为 1
else if(y==1) sum=x; //任何数的 1 次方 均为 本身
else if(y>1) sum=Pow_Self(x,--y)*x; //递归调用,降幂
return sum; //返回计算结果
}
void TimesUpdata() //时间更新 函数
{
if(TimesUpFlag) //若 时间更新标志 为真
{
Sec=++Sec%TimesEnd; //Sec (秒)在 TimesEnd (0~999) 范围内加1
TimesUpFlag=FALSE; //清 时间更新标志位
}
}
void Display(uint dis_num) //显示函数,显示内容为 无符号整型数据 dis_num
{
static uchar dis_loca; //定义静态变量 显示位置
if(DisplayFlag) //若显示标志位为真(单'位'显示时间结束),则执行以下任务
{
DisplayFlag=FALSE; //清显示标志位
dis_loca=++dis_loca%SEG_Num; //先对 显示位置 加1,后对变量范围进行限制 0~(SEG_Num-1)
SEG_AllOff; //关闭所有数码管显示(位驱动)
SEG_Data=SEG_B_List[(dis_num/(uint)(Pow_Self(10,dis_loca)))%10]; //将显示内容(dis_num) 本次需显示的位(dis_loca)上的数值转成代码,并送到数据端口
SEG_En|=1<<dis_loca; //开启本次需要显示的位驱动
}
}
void main() //主函数
{
SystemInit(); //调用 系统初始化函数
while(1) //循环系统
{
TimesUpdata(); //调用 时间更新函数
Display(Sec); //调用 显示函数 显示内容为 Sec
}
}

❼ 使用C语言编写数码管动态显示程序。头文件为reg52,h,数码管接P2口,为共阴

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;// 位锁存

unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

void Delay(unsigned int t); //函数声明

/埋让*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i=0;
while(1)
{
DataPort=dofly_WeiMa[i]; //取位码
LATCH2=1; //位锁存
LATCH2=0;

DataPort=dofly_DuanMa[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;

Delay(60000); /携尘/ 扫描间隙延时,时间太长会闪烁,太短会造成重影,
//这里故意延长时间,方便直观看出动态扫描原辩液禅理
i++;
if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个
//开始再次扫描8位
i=0;
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}

❽ 电路如下图请问单片机动态数码管显示C语言程序怎么写呢

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码答蔽管 0-9

unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主清滚州函数 */
/******************************************************************/
main()
{

TMOD |=0x01;//定时器设置 10ms in 12M crystal,工作在模式1,16位定时
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打开中断
TR0=1; //打开定时开关

while(1)
{
P0=Dis_Shiwei;//显示十位
P2=0;
delay(300); //短暂延时
P0=Dis_Gewei; //显示个位
P2=1;
delay(300);
}

}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char second,count;
TH0=0xd8; //备轮重新赋值
TL0=0xf0;

count++;
if (count==100) //100x10ms=1S,大致延时时间
{
count=0;
second++; //秒加1
if(second==100)
second=0;
Dis_Shiwei=tab[second/10];//十位显示值处理
Dis_Gewei=tab[second%10]; //个位显示处理

}

❾ 四位一体共阳级数码管动态显示c语言编程

//满意请采纳
//这是一个四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止
//使用时需采用锁存器
#include<reg52.h>
#include"stdio.h"
unsignedcharcodeLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedcharLEDbuff[]={0xff,0xff,0xff,0xff};
//定义数码管的位选段
sbitSEG_bit_1=P0^1;
sbitSEG_bit_2=P0^2;
sbitSEG_bit_3=P0^3;
sbitSEG_bit_4=P0^4;

unsignedintcnt=0;
unsignedintsec=0;
unsignedintmini=0;
unsignedinthour=0;
unsignedchari=0;
/*voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
*/
voidinterrupttimer0()interrupt1/*设置中断函数*/
{
TH0=0xfc;
TL0=0x18;
cnt++;
//P1=0x80;
//delay(1);
switch(i)
{
case0:SEG_bit_1=0;SEG_bit_4=1;P1=LEDbuff[0];i++;break;
case1:SEG_bit_4=0;SEG_bit_3=1;P1=LEDbuff[1];i++;break;
case2:SEG_bit_3=0;SEG_bit_2=1;P1=LEDbuff[2]&;i++;break;
case3:SEG_bit_2=0;SEG_bit_1=1;P1=LEDbuff[3];i=0;break;
default:break;
}

}
/************************************************
voidserial_init()
{
//TMOD=0x20;//定时器T/C1工作方式2
SCON=0x50;//串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)
TH1=0xF3;//定时器初值高8位设置
TL1=0xF3;//定时器初值低8位设置
PCON=0x80;//波特率倍频(屏蔽本句波特率为2400)
TR1=1;//定时器启动
}
**********************************************/
voidmain()
{
//serial_init();//串口初始化

//TMOD=0x21;/*设置定时器*/
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;

EA=1;/*设置中断*/
ET0=1;

while(1)
{
if(0==TF0)
{
if(cnt>=1000)
{
cnt=0;
sec++;
if(sec>=60){
sec=0;mini++;
if(mini>=60){
mini=0;hour++;
if(hour>=24)hour=0;
}
}

LEDbuff[0]=LED[sec%10];//*设置数码管显示位*/
LEDbuff[1]=LED[sec/10%10];
LEDbuff[2]=LED[mini%10];
LEDbuff[3]=LED[mini/10%10];
//TI=1;//使用printf函数前须先将发送标志位TI置1
//printf("%4d%x,%x%x ",sec,LEDbuff[0],LEDbuff[1],LEDbuff[2]);
//TI=0;

}
}
}
}

热点内容
编译链c语言执行速度 发布:2025-07-18 15:52:51 浏览:553
在线编程课程 发布:2025-07-18 15:46:56 浏览:171
生兔子算法循环 发布:2025-07-18 15:44:32 浏览:46
背包规划算法 发布:2025-07-18 15:44:27 浏览:108
微信安卓手机哪里设置铃声 发布:2025-07-18 15:36:54 浏览:780
期货云服务器好用吗 发布:2025-07-18 15:27:33 浏览:135
压缩空气原理 发布:2025-07-18 15:22:49 浏览:663
安卓怎么控制电脑 发布:2025-07-18 15:22:42 浏览:539
需要更改哪些防火墙配置 发布:2025-07-18 14:53:23 浏览:930
服务器如何不设置密码直接进入 发布:2025-07-18 14:48:23 浏览:381