📄 脚踏测试20080721c.c
字号:
////*这是一个4位数码管的显示控制程序,实现1到9999的显示 */
#include <reg51.h> //单片机的头文件
#include <stdio.h> //接口输入输出的头文件
#include <intrins.h>//???
sbit led1=P3^3; /*左为led1,右为led4 置0时显示*/
sbit led2=P3^2;
sbit led3=P3^5;
sbit led4=P3^4;
sbit lamp=P1^2;
sbit lamp1=P1^3;
led1on();
led2on();
led3on();
led4on();
disp4();
void mesc(unsigned int n);
void oddeven(unsigned int n);
/* 从左往右依次为0,1,2,.....8,9*/
const unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int cishu,x,qian,bai,shi,ge;
unsigned int y,y1,y2,y3,y4;
led1on()
{
led2=1;
led3=1;
led4=1;
led1=0;
}
led2on()
{
led1=1;
led2=0;
led3=1;
led4=1;
}
led3on()
{
led1=1;
led2=1;
led3=0;
led4=1;
}
led4on()
{
led1=1;
led2=1;
led3=1;
led4=0;
}
//////////*显示4位数 使用循环来显示
///如果程序中使用延时子程序可以减少y1、y2、y3、y4几个变量。
disp4()
{
// x=cishu/10;
qian=x/1000;
bai=(x-qian*1000)/100;
shi=(x-qian*1000-bai*100)/10;
ge=x-qian*1000-bai*100-shi*10;
for(y=0;y<1;y++) //old 20
{
for(y1=0;y1<10;y1++)
{
led1on();
P0=num[qian];
}
for(y2=0;y2<10;y2++)
{
led2on();
P0=num[bai];
}
for(y3=0;y3<10;y3++)
{
led3on();
P0=num[shi];
}
for(y4=0;y4<10;y4++)
{
led4on();
P0=num[ge];
}
}
oddeven(x);
}
//显示3位数 使用延时程序来显示
disp3()
{
// x=cishu/10;
qian=x/100; //百位
bai=(x-qian*100)/10; //十位
shi=x-qian*100-bai*10; //个位
for(y=0;y<10;y++) //old 30
{
led2on();
P0=num[qian];
mesc(2); //数值再大会闪烁
led3on();
P0=num[bai];
mesc(2);
led4on();
P0=num[shi];
mesc(2);
}
oddeven(x);
}
//显示2位数 使用延时程序来显示
disp2()
{
// x=cishu/10;
qian=x/10;
bai=x-qian*10;
for(y=0;y<10;y++) //old28
{
led3on();
P0=num[qian];
mesc(3);
led4on();
P0=num[bai];
mesc(3);
}
oddeven(x);
}
//延时程序 通过调用时改变时长n值来改变延迟时间
void mesc(unsigned int n)
{
unsigned char j;
while((n--)!=0)
{
for (j=0;j<2;j++)
{
;
}
}
}
void oddeven(unsigned int n)
{
if(n%2==1)
lamp=1;
else
lamp=0;
}
/////*将数值显示分别用子程序,减少主程序长度,可能能提高运行速度
/////*当然也可以把各中线时种显示直接写入主程序
/////*不过 直到2008.04.01还不清楚子程序名称的void的使用方法
void main(void)
{
int j;
int shuliang;
int status=0;
do{
for(cishu=0;cishu<50000;cishu++)
{
x=cishu/1;
if(x/1000>=1) //4位数
{
for(j=0;j<1;j++) //j为延时时长
//{
disp4();
oddeven(cishu);
}
else if(x/100>=1) //3位数
{
for(j=0;j<1;j++) //j为延时时长
{
disp3();
}
oddeven(cishu);
}
else if(x/10>=1) //2位数
{
for(j=0;j<1;j++) //j为延时时长
//{
disp2();
//}
oddeven(cishu);
}
else
{
if(lamp1==1 )
{
led4on();
P0=0x7f;//8
mesc(2000);//old 100
oddeven(cishu);
status=1;
}
else
{
led4on();
P0=num[shuliang];//1
mesc(2);//old 100
if(lamp==1)
shuliang=shuliang+1;
else
shuliang=shuliang;
oddeven(cishu);
status=0;
}
}
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -