c51中断/定时寄存器的典型运用程序

2016-10-10来源: eefocus关键字:c51  中断  定时寄存器
c51中断/定时寄存器的典型运用程序 -  此生不換? - 此生不換?de博客

 

程序如下:

 

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint z)
{
 uint t1,y;
 for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
void main()
{
 init();
 while(1)
 {
  if(flag1!=1)
   display(7,6,5,bai,shi,ge);
  else
   display(16,17,18,18,19,20); 
 }
}

void init()
{
 shu=432;
 temp=0xfe;
 P1=temp;
 TMOD=0x11;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;
 ET0=1;
 ET1=1;
 TR0=1;
 TR1=1;
}

void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 t0++;
 if(flag!=1)
  {
  if(t0==10)
   {
    t0=1;
    temp=_crol_(temp,1);
    P1=temp;
   }
  }
 else
  {
   if(t0%4==0)
    P1=~P1;
   if(t0==60)
   {
    TR0=0;
    P1=0xff;
    flag1=1;
   }
  } 
}

void timer1() interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 t1++;
 if(t1==2)
  {
   t1=0;
   shu--;
   bai=shu/100;
   shi=shu%100/10;
   ge=shu%10;
   if(shu==398)
    {
     TR0=0;
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     TR0=1;
     flag=1;
     t0=0;
     P1=0xff;
     TR1=0;
    } 
  } 
}

void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g)
{
        dula=1;
  P0=table[aa];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfe;
  wela=0;
  delay(1);

        dula=1;
  P0=table[bb];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfd;
  wela=0;
  delay(1);

       dula=1;
  P0=table[cc];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfb;
  wela=0;
  delay(1);
        dula=1;
  P0=table[ba];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xf7;
  wela=0;
  delay(1);

  dula=1;
  P0=table[sh];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xef;
  wela=0;
  delay(1);

  dula=1;
  P0=table[g];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xdf;
  wela=0;
  delay(1);
}

关键字:c51  中断  定时寄存器

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016101030289.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:解决STM32 J-FLASH不能读RAM 下载的问题
下一篇:STM32初学笔记1之RCC(上)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Autotalks和大唐完成C-V2X芯片组级互操作性评估

Autotalks和大唐已于6月底在北京完成了对C-V2X直接通信相应解决方案的芯片组级互操作性评估,以验证其解决方案并得出结论,它们的功能符合3GPP Rel.14 标准。Autotalks和大唐的原始测试是根据最新的CCSA(中国通信标准协会)草案制定的标准正在考虑世界上第一个。该测试具有开创性,展示了Autotalks公司独立的直接通信(PC5)解决方案的准备情况,使他们在中国部署C-V2X成为可能。“在与中国领先的汽车制造商进行多次成功的现场测试后不久,大唐实现了这个重要的里程碑,显示了我们的C-V2X技术在大规模部署方面的成熟,”Autotalks的亚太区业务开发和营销副总裁Ram Shallom说
发表于 2019-07-19

新版USB Type-C新规范出炉,可直接支持HDMI输出

 USB Type-C接口有可能成为未来多数笔记本电脑、智能手机的唯一数据接口,但这些仅支持USB接口的设备仍必须与那些非USB接口的设备进行交互,比如显示器、电视机等。因此,设计人员需要考虑如何在单个连接器中实现USB和其他高速接口的转换,其中涉及到切换引脚功能、提供诸如ESD的外部瞬变保护以及维护信号质量等问题。USB Type-C标准通过定义备用模式(Alt Mode)来满足这些需求,这种方法能够动态地更改引脚的功能,从而支持非USB的数据传输协议。 本文对各类标准进行了介绍,有了这些标准,USB Type-C才能连接到HDMI或其他非USB形式的数据接口。本文中还包含将HDMI备用模式增加到USB
发表于 2019-07-19
新版USB Type-C新规范出炉,可直接支持HDMI输出

ETC在国内不温不火发展4年,终于迎来了高光时刻?

ETC支付使用率约45%,而随着车联网和智慧交通的不断发展,未来ETC的地位很有可能受到一定的打击。  这还得从ETC的原理说起。ETC,其英文全称是Electronic Toll Collection System,翻译过来就是电子不停车收费系统,ETC的实现离不开三大要素:车载电子标签(OBU)、路侧单元(RSU)和专用短程通信技术(DSRC)。当车辆驶近收费站时,OBU与RSU通过DSRC进行通讯,利用计算机联网与银行进行后台处理,从而达到车辆不停车即可完成交费的目的。 而DSRC,笔者在《DSRC之殇,车联网真的要向C-V2X一边倒了吗?》这篇文章中曾盘点过这项技术,就车联网应用而言,它并不
发表于 2019-07-17
ETC在国内不温不火发展4年,终于迎来了高光时刻?

STM32开发笔记11: 在Keil中使用C++进行程序设计

单片机型号:STM32F030R8    希望在Keil中使用C++进行程序设计,开始时,总是报错,经过仔细分析,原因时Keil在默认情况下不支持C++进行程序设计。本文将介绍在Keil中使用C++进行程序设计的方法。    1、在Keil中使用C++进行程序设计,首先需要系统支持,如下图所示。      2、建立类,需要2个文件,cpp和hpp,在hpp中对类进行描述,在cpp中完成函数实现。      依循上述方法就可以使用C++进行程序设计了。
发表于 2019-07-17
STM32开发笔记11: 在Keil中使用C++进行程序设计

STM32开发笔记73: C++中子类调用父类同名函数的处理方法

单片机型号:STM32L053R8T61、问题父类有1方法:Enable_RS485,如下所示:class CUart{public: uint8_t u8_UartNumber; //端口号1-8 uint32_t u32_BaudRate; //波特率 uint8_t u8_Parity; //效验位 CC0 C0; //485控制引脚C0 CC1 C1; //485控制引脚C1 UART_HandleTypeDef hUART; uint8_t u8_UartReceiveBuffer[1];public: CUart(uint8_t
发表于 2019-07-13

浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)

引子STM32的硬件I2C很多人都对它望而却步。因为很多电工都说,STM32 硬件 I2C有BUG、不稳定、死机等等……最后都使用GPIO模拟I2C。的确,模拟I2C好用。但是在我看来在一个72M的Cortex-M3的MCU上这样做非常不妥。一般来说I2C是一种慢速总线,就算工作在400kHz的快速模式上,I2C传送每个字节仍需要至少23us——还没有计算地址、起始信号和结束信号的发送。如果使用GPIO模拟的I2C,这23us的CPU时间都在空转中浪费了,而这23us已经可以做不少的事情了,所以在STM32上I2C还是使用硬件为佳——虽然它多多少少有点缺陷。这篇文章不是给完全没有接触过STM32 硬件I2C的新手看的,看这
发表于 2019-07-13
浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved