📄 实验9.txt
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define PA8155 XBYTE[0x7101]
#define PB8155 XBYTE[0x7102]
#define COM8155 XBYTE[0x7100]
uchar digbit;
uchar b[4],reset=1;
int flag=0;
uint k,m,n;
uchar code tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; //0~9的段码
uchar code tab1[10]={0xfd,0x61,0xd,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7}; //0~9带小数点的段码
//延时函数,送数码管各位数之间的延时
void delay(uint t)
{
uint m;
for(m=0;m<t;m++);
}
//外部中断0子程序,按下键后启动或停止计时
void bs() interrupt 0 using 1
{
if(flag==0)
flag=1;
else
flag=0;
}
//外部中断1子程序实现清零功能
void ql() interrupt 2 using 1
{
reset=0;
}
//主程序
//功能:使用定时器定时0.1s,从000.0s计时到999.9s,将时间显示在数码管上
void main()
{
COM8155=0x03;
EA=1; //开总中断
EX0=1;IT0=1; //开外部中断0并设置为脉冲触发方式
EX1=1;IT1=1; //开外部中断1并设置为脉冲触发方式
digbit=0x10; //位码
while(1)
{
uchar x,j;
uint i;
TMOD=0x01; //设置定时器0工作于方式1
for(i=0;i<10000;)
{
x=i/100; //求秒表的各位数
b[3]=x/10;
b[2]=x%10;
x=i%100;
b[1]=x/10;
b[0]=x%10;
for(j=0;j<2;j++) //50us的循环次数
{
TH0=(65536-50000)/256; //50us计数初值
TL0=(65536-50000)%256;
k=0;
TR0=1; //启动定时器
while(!TF0) //50us计数未溢出循环显示
{
PA8155=digbit; //选中数码管
if(digbit==0x20)
PB8155=tab1[b[k]]; //如果是个位则送带小数点的段码显示
else
PB8155=tab[b[k]]; //否则送不带小数点的段码显示
delay(100); //约200us
if(k<4)
{
digbit*=2;k++; //依次左移显示下一个数码管直至四个数码管全部点亮
}
else
{
digbit=0x10;k=0; //从低位开始重新显示
}
}
TF0=0;
}
if (flag==1)
i++; //计数加1
if(reset==0) //外部中断1发生清零
{
i=0;
reset=1;
flag=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -