单片机系统实验.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机系统实验

班级 学号 姓名 实验项目: 单片机系统实验 一、实验目的: (1)学会程序的编写与调试,掌握子程序的设计与使用,熟悉中断服务程序的设计及调用过程。 (2)综合运用所学知识,进行单片机系统的开发编程 二、实验内容: 编程实现如下功能的倒计时秒表。 ⑴秒表可从59s~0s循环运行。即每隔1s,数码管显示的秒数减1,减到0s时,再过1s,又回到59,重新从59开始减。 ⑵倒计时初值可通过键盘设置。按Key3(P3.4)键,数码管的十位加1,从0~5循环变化;按Key4(P3.5)键,数码管的个位加1,从0~9循环变化; ⑶运行控制。按下Key1(P3.2)键秒表开始运行;按下Key2(P3.3)键秒表停止运行; 三、实验说明及实验电路图 四、实验程序及分析 #includereg51.h #define uchar unsigned char #define uint unsigned int #define swsmgdat P0 //数码管十位数据 #define gwsmgdat P2 //数码管各位数据 sbit key3 = P3^4 ; //按键调整各位 0~9 uchar code tem_CA[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ; //共阳数码管0~9 uchar sec5ms, sec1s,count,flag=1; //定义全局变量 flag为标志位 1开始 0 暂停 int second=59,cur_second ; //-------------------------------- void Timer0_Init(void) //定时器0 外部中断0,1初始化 { TMOD = 0X61 ; //0110 0001 计数器方式2(8位自动重装初值) TH0=(65536-5000)/256 ; TL0=(65536-5000)%256 ; TH1=0xFF ; TL1=0xFF ; EA=1 ; ET0=1 ; TR0=1 ; ET1=1 ; TR1=1 ; IT0=1; EX0=1; IT1=1; EX1=1; } //-------------------------------------- void wbzd_0() interrupt 0 //key1 外部0中断 { flag = 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) {second--;} if( second0 ) { second = 59 ; } } } } //--------------------------------- void wbzd_1() interrupt 2 //key2 外部1中断 { if(flag==1) flag = 0 ; } //--------------------------------- void Timer_1() interrupt 3 //key4 计数器1 中断 { if(flag==1) flag=0 ; cur_second=second ; cur_second = cur_second+10 ; if(cur_second=60) cur_second = cur_second-60 ; second = cur_second; } //---------------------------------- void smg_display() //定义两位数码管 { if( second=10 ) { swsmgdat = tem_CA[second/10] ; gwsmgdat = tem_CA[second%10] ; } else { swsmgdat = 0xFF; gwsmgdat = tem_CA[s

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档