利用实验箱,制作一电子秒表(分别用汇编语言和单片机c 语言编写) 单片机实验
发布网友
发布时间:2022-05-07 11:39
我来回答
共2个回答
热心网友
时间:2023-10-29 20:07
这个实验,随便一本单片机书都有的程序。再说了,你没有说是用液晶屏显示还是数码管,数码管又是哪种的,共阳还是共阴?你可以参见以下连接。
参考资料:http://wenku.baidu.com/view/def806aedd3383c4bb4cd29e.html
热心网友
时间:2023-10-29 20:07
这个程序是6位数码管
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;//按键1 加数
sbit key2=P3^5;//按键2 减数
sbit key3=P3^6;//按键3 归零
sbit key4=P3^7;//按键4 暂停/开始
sbit dx=P2^6; //段选
sbit wx=P2^7;//位选
uchar num,num0,miao,fen;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//数码管段码
void delay(uchar xms)//延时子程序XMS
{
uchar i,j;
for(i=0;i<110;i++)
for(j=0;j<xms;j++);
}
void display(uchar x,uchar y,uchar z) 显示函数
{
uchar shi,ge,a,b,c,d;
shi=x/10;
ge=x%10;
a=y/10;
b=y%10;
c=z/10;
d=z%10;
dx=1;
P0=table[a];
dx=0;
P0=0xff;
wx=1;
P0=0xfe;
wx=0;
delay(1);
dx=1;
P0=table[b];
dx=0;
P0=0xff;
wx=1;
P0=0xfd;
wx=0;
delay(1);
dx=1;
P0=table[c];
dx=0;
P0=0xff;
wx=1;
P0=0xfb;
wx=0;
delay(1);
dx=1;
P0=table[d];
dx=0;
P0=0xff;
wx=1;
P0=0xf7;
wx=0;
delay(1);
dx=1;
P0=table[shi];
dx=0;
P0=0xff;
wx=1;
P0=0xef;
wx=0;
delay(1);
dx=1;
P0=table[ge];
dx=0;
P0=0xff;
wx=1;
P0=0xdf;
wx=0;
delay(1);
}
void init() 初始化子程序
{
P3=0xff;
num=0;
num0=0;
miao=0;
fen=0;
TMOD=0x01;
TH0=(65536-9177)/256;
TL0=(65536-9177)%256;
EA=1;
ET0=1;
}
void key()//按键程序
{
if(key1==0)
{
delay(5);
if(key1==0)
{
fen++;
if(fen==60)
fen=0;
while(!key1);
delay(5);
while(!key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
miao++;
if(miao==60)
miao=0;
while(!key2);
delay(5);
while(!key2);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
init();
while(!key3);
delay(5);
while(!key3);
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
TR0=~TR0;
while(!key4);
delay(5);
while(!key4);
}
}
}
void main()//主函数
{
init();
while(1)
{
key();
display(num,fen,miao);
}
}
void T0_time() interrupt 1 //中断
{
TH0=(65536-9177)/256;
TL0=(65536-9177)%256;//定时器装10毫秒 初值
num0++;
if(num0==1)
{
num0=0;
num++;
if(num==100) 100个10毫秒=1000毫秒为1秒 00~99
{
num=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
fen=0;
}
}
}
}
供你参考..汇编的还没学 不会..抱歉...!希望对你有帮助!
热心网友
时间:2023-10-29 20:07
这个实验,随便一本单片机书都有的程序。再说了,你没有说是用液晶屏显示还是数码管,数码管又是哪种的,共阳还是共阴?你可以参见以下连接。
参考资料:http://wenku.baidu.com/view/def806aedd3383c4bb4cd29e.html
热心网友
时间:2023-10-29 20:07
这个程序是6位数码管
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;//按键1 加数
sbit key2=P3^5;//按键2 减数
sbit key3=P3^6;//按键3 归零
sbit key4=P3^7;//按键4 暂停/开始
sbit dx=P2^6; //段选
sbit wx=P2^7;//位选
uchar num,num0,miao,fen;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//数码管段码
void delay(uchar xms)//延时子程序XMS
{
uchar i,j;
for(i=0;i<110;i++)
for(j=0;j<xms;j++);
}
void display(uchar x,uchar y,uchar z) 显示函数
{
uchar shi,ge,a,b,c,d;
shi=x/10;
ge=x%10;
a=y/10;
b=y%10;
c=z/10;
d=z%10;
dx=1;
P0=table[a];
dx=0;
P0=0xff;
wx=1;
P0=0xfe;
wx=0;
delay(1);
dx=1;
P0=table[b];
dx=0;
P0=0xff;
wx=1;
P0=0xfd;
wx=0;
delay(1);
dx=1;
P0=table[c];
dx=0;
P0=0xff;
wx=1;
P0=0xfb;
wx=0;
delay(1);
dx=1;
P0=table[d];
dx=0;
P0=0xff;
wx=1;
P0=0xf7;
wx=0;
delay(1);
dx=1;
P0=table[shi];
dx=0;
P0=0xff;
wx=1;
P0=0xef;
wx=0;
delay(1);
dx=1;
P0=table[ge];
dx=0;
P0=0xff;
wx=1;
P0=0xdf;
wx=0;
delay(1);
}
void init() 初始化子程序
{
P3=0xff;
num=0;
num0=0;
miao=0;
fen=0;
TMOD=0x01;
TH0=(65536-9177)/256;
TL0=(65536-9177)%256;
EA=1;
ET0=1;
}
void key()//按键程序
{
if(key1==0)
{
delay(5);
if(key1==0)
{
fen++;
if(fen==60)
fen=0;
while(!key1);
delay(5);
while(!key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
miao++;
if(miao==60)
miao=0;
while(!key2);
delay(5);
while(!key2);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
init();
while(!key3);
delay(5);
while(!key3);
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
TR0=~TR0;
while(!key4);
delay(5);
while(!key4);
}
}
}
void main()//主函数
{
init();
while(1)
{
key();
display(num,fen,miao);
}
}
void T0_time() interrupt 1 //中断
{
TH0=(65536-9177)/256;
TL0=(65536-9177)%256;//定时器装10毫秒 初值
num0++;
if(num0==1)
{
num0=0;
num++;
if(num==100) 100个10毫秒=1000毫秒为1秒 00~99
{
num=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
fen=0;
}
}
}
}
供你参考..汇编的还没学 不会..抱歉...!希望对你有帮助!
热心网友
时间:2023-10-29 20:07
这个实验,随便一本单片机书都有的程序。再说了,你没有说是用液晶屏显示还是数码管,数码管又是哪种的,共阳还是共阴?你可以参见以下连接。
参考资料:http://wenku.baidu.com/view/def806aedd3383c4bb4cd29e.html
热心网友
时间:2023-10-29 20:07
这个程序是6位数码管
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;//按键1 加数
sbit key2=P3^5;//按键2 减数
sbit key3=P3^6;//按键3 归零
sbit key4=P3^7;//按键4 暂停/开始
sbit dx=P2^6; //段选
sbit wx=P2^7;//位选
uchar num,num0,miao,fen;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//数码管段码
void delay(uchar xms)//延时子程序XMS
{
uchar i,j;
for(i=0;i<110;i++)
for(j=0;j<xms;j++);
}
void display(uchar x,uchar y,uchar z) 显示函数
{
uchar shi,ge,a,b,c,d;
shi=x/10;
ge=x%10;
a=y/10;
b=y%10;
c=z/10;
d=z%10;
dx=1;
P0=table[a];
dx=0;
P0=0xff;
wx=1;
P0=0xfe;
wx=0;
delay(1);
dx=1;
P0=table[b];
dx=0;
P0=0xff;
wx=1;
P0=0xfd;
wx=0;
delay(1);
dx=1;
P0=table[c];
dx=0;
P0=0xff;
wx=1;
P0=0xfb;
wx=0;
delay(1);
dx=1;
P0=table[d];
dx=0;
P0=0xff;
wx=1;
P0=0xf7;
wx=0;
delay(1);
dx=1;
P0=table[shi];
dx=0;
P0=0xff;
wx=1;
P0=0xef;
wx=0;
delay(1);
dx=1;
P0=table[ge];
dx=0;
P0=0xff;
wx=1;
P0=0xdf;
wx=0;
delay(1);
}
void init() 初始化子程序
{
P3=0xff;
num=0;
num0=0;
miao=0;
fen=0;
TMOD=0x01;
TH0=(65536-9177)/256;
TL0=(65536-9177)%256;
EA=1;
ET0=1;
}
void key()//按键程序
{
if(key1==0)
{
delay(5);
if(key1==0)
{
fen++;
if(fen==60)
fen=0;
while(!key1);
delay(5);
while(!key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
miao++;
if(miao==60)
miao=0;
while(!key2);
delay(5);
while(!key2);
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
init();
while(!key3);
delay(5);
while(!key3);
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
TR0=~TR0;
while(!key4);
delay(5);
while(!key4);
}
}
}
void main()//主函数
{
init();
while(1)
{
key();
display(num,fen,miao);
}
}
void T0_time() interrupt 1 //中断
{
TH0=(65536-9177)/256;
TL0=(65536-9177)%256;//定时器装10毫秒 初值
num0++;
if(num0==1)
{
num0=0;
num++;
if(num==100) 100个10毫秒=1000毫秒为1秒 00~99
{
num=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
fen=0;
}
}
}
}
供你参考..汇编的还没学 不会..抱歉...!希望对你有帮助!