急急急!!!越快越好!!求数码管显示的循环计数器设计的C语言程序!
发布网友
发布时间:2023-12-16 22:59
我来回答
共3个回答
热心网友
时间:2024-12-12 02:15
#include "reg52.h"
#define uchar unsigned char
uchar display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uchar display_data[8]={0,0,0,0,0,0,0,0};
uchar time[]={9999,0,0};//设初始值
void delay(void)//显示程序
{
uchar i;
for(i=250;i>0;i--);
}
void display()
{
uchar i,k;
k=0x80;
for(i=0;i<8;i++)
{
P2=0;
P0=display_code[display_data[i]];
P2=k;
k=k>>1;
delay();
}
P2=0;
}
void calc()//减1
{
time[0]--;
if(time[0]==-1)
time[0]=9999;
}
void convert()
{
display_data[0]=time[0]/1000;//千位
display_data[1]=time[0]%1000/100;//百位
display_data[2]=time[0]%1000%100/10;//十位
display_data[3]=time[0]%1000%100%10;//个位
}
void main(void)
{
uchar i;
while(1)
{
for(i=0;i<250;i++)
{
display();
}
calc();
convert();
}
}追问能再详细点吗,就是在每一句程序的后面写清这句是什么意思,我是菜鸟啊,刚刚接触到C语言!!
热心网友
时间:2024-12-12 02:16
/////////////////////////////////////////////////////////////////////////////////////////////////
//程序功能:0到9999加一显示
//MCU:STC89C52
//硬件连接:P0接数据口,P1.0接段码锁存信号,P1.1接位码锁存信号。位码口和段码口分别有一片573做驱动!
//晶振大小:12MHZ
///////////////////////////////////////////////////////////////////////////////////////////////
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitwei=P1^0;//位码锁存控制端
sbitan=P1^1;//段码锁存控制端
uintcont,qian,,shi,ge,bt;//bt为一秒内循环次数标志位
ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};//共ying的代码
voidinit()
{
cont=9987;//数码管开机显示值,可更改
//qian=3;//最左一位的数码管显示值,用于调试!
//=2;
//shi=1;
//ge=0;
}
/////////////////////////延时函数/////////////////////////////////////////////////////////
voiddelay(ucharz)
{
ucharx,y;
for(x=0;x<=z;x++)
for(y=0;y<=110;y++);
}
////////////////////////消影函数/////////////////////////////////////////////////////
voidxiaoying()
{
P2=0x00;
an=1;
an=0;
}
///////////////显示函数//////////////////////////////////////////////////////////////
voiddisplay()
{
P2=0x7f; //显示个位
wei=1;
wei=0;
P2=tab[ge];
an=1;
an=0;
delay(2);
xiaoying(); //调用消影函数
P2=0xbf; //显示十位
wei=1;
wei=0;
P2=tab[shi];
an=1;
an=0;
delay(2);
xiaoying(); //调用消影函数
P2=0xdf; //显示百位
wei=1;
wei=0;
P2=tab[];
an=1;
an=0;
delay(2);
xiaoying(); //调用消影函数
P2=0xef; //显示千位
wei=1;
wei=0;
P2=tab[qian];
an=1;
an=0;
delay(2);
xiaoying();//调用消影函数
}
/////////////////////////数据处理函数/////////////////////////////////////////////
voidchuli()
{
qian=cont/1000;
=cont/100%10;
shi=cont/10%10;
ge=cont%10;
}
/////////////////////主函数///////////////////////////////////////////////////////////
voidmain()
{
init();
while(1)
{
while(bt!=250)//延时执行250次时,大约为1秒
{
chuli();//数据分离处理
display();//显示
bt++;
}
bt=0;//清零
cont++;//数码管显示值加1
if(cont==10000)//如果数码管显示的值为10000时,清零
cont=0;
}
}追问程序功能怎么是0到9999加一显示,我要的是从9999减1啊,减到0是再回到9999继续循环!还有能不能解释一下调用消影函数,没接触过这个函数!
热心网友
时间:2024-12-12 02:16
有两位朋友已经发了,