云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 《单片机原理及应用》实验指导书

《单片机原理及应用》实验指导书

  • 62 次阅读
  • 3 次下载
  • 2026/4/26 2:01:17

{ uchar data key_temp; }

//==========================================================================

void timer_0(void) interrupt 1 {

static uchar data keylong;

key_temp=(~P1)&0x0f;

if(key_temp==0) { key_new=key_temp; keylong=0; key_on=0; else if(key_new!=key_temp)

{ key_new=key_temp;key_on=0; key_again=0; keylong=1;} else if(keylong<4) { key_on=0; key_again=0; keylong++;} else if(keylong==4) { key_on=1; key_again=1; keylong++;} else if(keylong>200) { key_on=0; key_again=1; keylong=170;} else { keylong++;}

key_again=0;}

code uchar

TAB1[]={0x48,0xeb,0x52,0x62,0xe1,0x64,0x44,0xea,0x40,0x60};

code uchar TAB2[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; static uchar dsp[8]; static uchar n; TH0=(65536-2304)/256; TL0=(65536-2304)%6; delay_time++;

if(++count==400) { }

30

//设置定时器初值,2.5ms中断一次

++sec; count=0; NewTime=1; if(sec==60) if(min==60)

{++min; {++hour;

sec=0;} min=0;}

if(hour==24) {hour=0;}

}

dsp[0]=TAB1[hour/10]; dsp[1]=TAB1[hour]; dsp[2]=0xf7; dsp[3]=TAB1[min/10]; dsp[4]=TAB1[min]; dsp[5]=0xf7; dsp[6]=TAB1[sec/10]; dsp[7]=TAB1[sec];

n++; n%=8;

P0=dsp[n]; P2=TAB2[n];

if((count)==0) keyscan();

//========================================================================

void delay(uint t) { EA = 0; }

delay_time = 0; EA = 1;

while(delay_time

五、思考题

1. 给电子钟加上打铃的功能,打铃时间固定。

2. 给电子钟加上打铃时间调节功能。如何实现多点(4个)打铃功能?

附:电子钟汇编参考程序,不含按键检测和整点提示功能。

LED_PORT EQU SCN_PORT EQU

P0 P2

;笔划输出,低有效

;段扫描输出,低有效(P2.4-P2.7)

DSEG

31

ORG 10H 8 1 1 2

;显示缓冲区 ;扫描指针 ;扫描码

;中断计数,每2.5ms加1

DISP_BUF: DS SCN_INX: DS SCN_COD: DS CNT:

DS CSEG

ORG 00H LJMP MAIN ORG 0BH

;主程序入口,转初始化程序

;定时中断0入口

;每2.5ms中断一次,用于刷新显示

LJMP INTP0 ORG 30H MOV CLR CLR CLR MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV

SCN_INX,A TMOD,#01H A CNT+0,A CNT+1,A SP,#50H RS0 RS1

;-----------初------始-----化--------------------------------- MAIN:

;初始化堆栈指针 ;选用第0组通用寄存器

CLR P1.5

DISP_BUF+0,#2 DISP_BUF+1,#3 DISP_BUF+2,#10 DISP_BUF+3,#5 DISP_BUF+4,#8 DISP_BUF+5,#10 DISP_BUF+6,#0 DISP_BUF+7,#0

32

;时十位 ;时个位 ;显示'-' ;分十位 ;分个位 ;显示'-' ;秒十位 ;秒个位 ;扫描指针置0 ;右边LED先点亮 ;定时器0,方式1

MOV SCN_COD,#80H MOV

MOV TH0,#0F7H MOV TL0,#000HSETB TR0 SETB SETB SJMP PUSH PUSH

EA ET0 $ ACC PSW

;计数初值,每次

2.5ms(11.0592MHz晶振)

;65536-(2.5ms/1.085us)=65536-2304=63232=0F700H

;启动定时器0 ;中断总允许 ;允许定时器0中断 ;主程序在此循环

;-----------定时器0中断服务程序,间隔2.5ms-------------- INTP0:

MOV TH0,#0F7H MOV TL0,#00H SETB CLR MOV ANL ADD MOV MOV MOV ANL

A,SCN_INX A,#07H A,#DISP_BUF R1,A A,@R1 RS0 RS1

;置计数初值

;选用第1组通用寄存器

;取扫描指针 ;清除高5位

;加显示缓冲区首地址

DPTR,#CODE_TAB A,#0FH

;DPTR指向笔划代码表 ;取笔划代码 ;笔划代码送LED口 ;取扫描段代码

MOVC A,@A+DPTR

MOV LED_PORT,A MOV MOV

A,SCN_COD P2,A A,SCN_COD

MOV RR A

33

;扫描段代码循环右移一位 ;扫描指针+1

MOV INC

SCN_COD,A SCN_INX

搜索更多关于: 《单片机原理及应用》实验指导书 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
本文作者:...

共分享92篇相关文档

文档简介:

{ uchar data key_temp; } //========================================================================== void timer_0(void) interrupt 1 { static uchar data keylong; key_temp=(~P1)&0x0f; if(key_temp==0) { key_new=key_temp; keylong=0; key_on=0; else if(key_new!=key_temp) { key_new=key_temp;key_on=0; key_again=0; keylo

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com