如何突破单片机教学中简易数字钟教学难点.docVIP

如何突破单片机教学中简易数字钟教学难点.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何突破单片机教学中简易数字钟教学难点

如何突破单片机教学中简易数字钟教学难点   摘 要:本项目教学难点是:1、定时器的应用;2、时、分、秒如何计数及怎样显示在数码管上。本例没有应用时钟芯片,而是利用51系列单片机的定时器T1的自动重装的方式1功能实现了精确的1ms和1s的定时基准的产生,其中1ms为最基本的定时时基,用于6位共阴动态LED的扫描刷新之外,还通过sCounter软计数变量用于1000次的1ms计数产生1s 精确的秒定时时基,用于基本计数时钟源。本例采用云龙单片机实验板及C语言编程实现 关键词:数字电子钟;精确定时;数码管动态扫描;时钟显示的原理 在中职生单片机教学中需要突破的教学难点很多,而且涉及C语言编程,电子元件及模块的应用,电路原理等多项问题,相对于中职生来说,在兴趣的培养教学方面和简单易懂的原则教学问题上都有着较大的挑战,是比较值得钻研的教学难题,固此在这阐述一下我在教学中遇到的问题,为进一步探讨和简化中职生单片机教法吸取经验 本例学生用到的实验板原理图如下: 一、数码管图块 二、单片机图块 三、数码管段选和位选控制的锁存器图块 实例中单片机晶振选择的频工作频率为12MHz,定时器的最小计数时间为1us,调试参考程序如下: #include sfr P0M1 = 0x95; //--- 新增的功能寄存器地址声明 --- sfr P0M0 = 0x96; unsigned char code LEDSEG[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,};//--- 显示0~9,A~F笔段代码表 --- unsigned char code LEDDIG[] = { 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,}; unsigned char LEDBuffer[6];//--- 定义的显示缓冲区 --- unsigned char LEDPointer; //--- 定义的扫描计数变量 --- unsigned int sCount; //--- 定义的秒计数器变量 --- unsigned char Second; //--- 定义的秒变量 --- unsigned char Minute; //--- 定义的分变量 --- unsigned char Hour; //--- 定义的时变量 --- void main(void) { P0M1 = 0x00; //--- 配置P5端口的P0.0~P0.7为推挽输出模式 --- P0M0 = 0xFF; TMOD = 0x10; //--- 配置T1为定时模式,工作于方式1,16位装载模式 --- TH1 = (65536 - 1000) / 256; //--- 初始化T1定时1mS --- TL1 = (65536 - 1000) % 256; TR1 = 1; //--- ?⒍?T1工作 --- ET1 = 1; //--- 使能T1中断 --- EA = 1; //--- CPU开中断 --- while(1) { } } sbit dula=P2; sbit wela=P2 ; //-------------------------------------------------------------------------------------- //--- 定时器T1溢出中断服务程序 --- void T1_ISR(void) interrupt 3 { TH1 = (65536 - 1000) / 256; //--- 初始化T1定时1mS --- TL1 = (65536 - 1000) % 256; dula=1; P0 = LEDSEG[LEDBuffer[LEDPointer]];//数码管显示段选码 dula=0; wela=1; //--- 显示数字 --- P0 = LEDDIG[LEDPointer]; wela=0; //--- 数码管的位选段选择 --- LEDPointer++; //--- 动态扫描计数变量加1 --- if(sizeof(LEDBuffer)==LEDPointer)LEDPointer = 0; //--- 所有数码管扫描完,计数归0 --- sCount ++; //--- 秒计

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档