数码管显示的按键调整
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);