数码管显示的按键调整

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级

学号

姓名

数码管显示的按键调整

实验项目:

一、实验目的:

(1)掌握数码管的显示工作原理。

(2)掌握I/O口的使用。

(3)掌握数码管动态显示及程序设计方法。

二、实验内容:

编程实现如下功能的倒计时秒表。

(1)数码管的初始显示为0;且当显示的数值小于10时,十位位置的数码管不显示。

(2)每按Key1(P1.0)键一次,数码管的显示值加1,并按照0→1→2→3…→20→0次序循环变化;每按Key2(P1.1)键一次,数码管显示值减1,按照20→19→18→17…→0→20次序循环变化;

三、实验说明及实验电路图

四、实验程序及分析

#include

#define uchar unsigned char

#define uint unsigned int

#define smgdat P0 //数码管数据端

sbit s1 = P2^1 ; //两位数码管控制端 s1 s2

sbit s2 = P2^2 ;

sbit key1 = P1^0 ; //按键端口key1 + key2 -

sbit key2 = P1^1 ;

uchar code tem_CA[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ; //共阳数码管0~9

uchar sec5ms, sec1s, mark_0,count,flag=1;

int num=0 ;

//--------------------------------

void Timer0_Init(void) //定时器初始化

{

TMOD = 0X01 ;

TH0=(65536-5000)/256 ;

TL0=(65536-5000)%256 ;

EA=1 ;

ET0=1 ;

TR0=1 ;

}

void Timer0(void) interrupt 1 //定时器0进中断

{

TH0 = (65536-5000)/256 ;

TL0 = (65536-5000)%256 ;

sec5ms = 1 ; //标记

count++ ;

if(count==200)

{

count=0; sec1s=1 ;

if( sec1s==1 )

{

sec1s = 0 ;

if(flag==1) {num++ ; }

if( num==21 ) {num = 0 ; }

}

}

}

/*函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 */ //-------------------------------------------------- void delay1ms()

{

uchar i, j ;

for( i=0 ; i<10 ; i++)

for( j=0 ; j<33 ; j++) ;

}

/*函数功能:延时n毫秒*/

//------------------------------

void delaynms(uchar n)

{

uchar i ;

for( i=0; i

{ delay1ms() ;}

}

//---------------------------

void lwsmg_display() //定义两位数码管

{

s1 = 0; s2 = 0 ;

mark_0 = ~mark_0 ; //标记

if(mark_0==0) //动态显示

{

if(num<10)

{

s1 = 1; s2 = 0 ;

smgdat = 0xFF ;

}

else

{

s1 = 1; s2 = 0 ;

smgdat = tem_CA[num/10]; //十位

}

}

else

{

s1 = 0 ; s2 = 1 ;

smgdat = tem_CA[num%10] ; //个位

}

}

//------------------------------------------------- void read_anjian()

{

if( key1==0 )

{

delaynms(8) ;

if( key1==0 )

{if(flag==1) {flag=0;}

num++ ;if( num==21 ) { num=0 ;}

}

while(!key1) ;

delaynms(7) ;

while(!key1) ;

}

if(key2==0)

{

delaynms(8);

if(key2==0)

{ if(flag==1) {flag=0;}

num--;if(num<0) { num=20;}

}

while(!key2);

相关文档
最新文档