原创 合泰单片机做情人节礼物

2009-2-15 23:42 3691 8 9 分类: MCU/ 嵌入式

原理图很简单,就是一个合泰单片机(因为便宜嘛),加上8个LED发光二极管排成一排、一个滚珠开关(测速用)。做了一个手摇棒,你摇动LED棒时候,会显示“我爱你”等。不摇动时候,就是一排亮的LED灯,一摇动显示的字就出来了。主要在于测速问题。手摇动的速度是不均的。计算好速度。


也可以改为手摇时钟。


/*


MCU:HT48f50e
frequency:1MHZ
cycle:4us
one instruction cycle:4us
time0 count cycle:1/(1MHZ/分频比)=128us
time1 count cycle:4us
dispart frequence scale:128
*/


#include <ht48r50a-1.h>
#define freq 128
#define _t0on _0e_4
#define _t1on _11_4
#pragma vector exti @ 0x4
#pragma vector time0 @ 0x8
#pragma vector time1 @ 0xc
const unsigned char dispcode[20]={0xff,0xff,0x7e,0x0,0x7e,0xff,0xff,0xe1,0xde,0xbd,
                                  0xde,0xe1,0xff,0xff,0xc0,0xbf,0x7f,0xbf,0xc0,0xff};
#pragma rambank0
bit flag;
unsigned char intcount,n,m;      //interrupt times count
unsigned int tmr1h_temp,tmr1l_temp,overcnt,tmr1_temp1,tmr1_temp2,overrec;


void safe_init()
 {
  _intc=0;
  _tmr0=0;
  _tmr0c=0;
  _tmr1h=0;
  _tmr1l=0;
  _tmr1c=0;
  _pac=0xff;
  _pbc=0xff;
  _pcc=0xff;
  _pgc=0xff;
 }
void initial()   //tmr1h_temp,tmr1l_temp,overcnt,tmr1_temp1,tmr1_temp2,overrec;
 {
  overcnt="0";
  n="0";
  m="20";
  intcount="0";     //interrupt counter clear zero
  overcnt="0";
  _intc=0x0f;     //disable timer1 interrupt
  _tmr0c=0x8e;    //dispart frequence scale:1:128,timer mode,close timer
  _tmr1c=0x88;    //timer mode,close time1
  _tmr1l=0x18;    //timer1 is a 16bit timer,timer1 initialization:65536-65000=536
  _tmr1h=0x02;    //overflow time:65000*4=260ms
  _pac=0;           //pa pin is a output port
  _pa=0;
  _pgc=0x01;        //pg0 pin is a iuput port
 }


void main()
 {
 
  safe_init();
  initial();
  while(1)
   {
    if(flag==1)
    {
    
     tmr1h_temp=(unsigned long)_tmr1h;
     tmr1l_temp=(unsigned long)_tmr1l;
     tmr1_temp1=(tmr1h_temp<<8)|tmr1l_temp;
     tmr1_temp1=(tmr1_temp1-536)/250;          //tmr1_temp1*4/1000=ms
     _tmr1l=0x18;  
     _tmr1h=0x02;
     _t1on=1;
     tmr1_temp2=(tmr1_temp1+overrec)/40;
     _tmr0=(256-(tmr1_temp2*1000/freq));
     _t0on=1;
    }
   }
 }
 


/*extern interrupt sub program*/
void exti()
 {
  intcount++;
  _t1on=1;
  if(intcount==2)
   {
    _t0on=0;
    overrec="overcnt";
    overcnt="0";
    intcount="1";
    _t1on=0;
    flag="1";  
   }
 }
/*time0 interrupt sub program*/
void time0()
 {
   n++;
   if(n<20)
    { _pa=dispcode[n];
     
     }
   else
     {
       m--;
       _pa=dispcode[m];
       if(m<1)
        {
          _t0on=0;
          n="0";
          m="20";
        }
     } 
  
 }
/*tim1 interrupt sub program*/
void time1()
 {
  overcnt+=260;
 }

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户194677 2009-4-8 15:56

多多向你学习,加油!!
相关推荐阅读
用户184981 2011-03-18 13:35
平板5剑客--英雄续战
板电脑的5剑客:摩托、thinkpad、联想、黑莓、三星。在2011年开始,大放光彩。。。安卓系统3.0全面超越了苹果的系统,苹果的平板无论硬件还是软件、做工,价格将毫无优势。。     当然平板5...
用户184981 2011-01-22 16:09
笔记本外壳材料只有3种
对于外观酷似塑料的碳纤维材质,很多同朋友总是分不清楚它和普通塑料的区别,下面我们就来简单介绍一下碳纤维与其它笔记本外壳材质的优劣对比。 碳纤维的强韧性是铝镁合金的两倍,又有ABS工程塑料的高可塑性。外...
用户184981 2010-11-28 15:06
别相信鲁大师等电脑测温软件
别被鲁大师或者QQ管家等提供的温度软件工具忽悠了: 他们显示的电脑温度来自于电脑的BIOS信息,电脑的BIOS信息是厂家在bootloader时候的一段固件代码,里面有测温程序,而程序是可以人为编写的...
用户184981 2010-10-03 10:30
2010笔记本质量最不可靠度排行
北京时间8月10日下午消息,据国外媒体报道,美国科技博客TechRepublic最近对IT专业人士的调查显示,在对笔记本的好坏进行评价时,宏碁笔记本电脑几乎被一致认为是最差的产品。 过去几年间,随着笔...
用户184981 2010-09-11 15:02
最新笔记本品牌质量排行
最新笔记本品牌质量排行榜) 根据美国美国质量学会(ASQ )报告,Underwriters Laboratories Inc组长,在2008年对所有IT品牌做了详细质量分析报告,同期,《21世纪》,针...
用户184981 2010-05-27 23:52
突然想起了她
 时光飞逝,又将过掉半年了,工作待遇提高了,最近好忙好忙,真担心自己身体会跨了。城市的生活节奏快的让人窒息。      雨下的很多,雨带来了静思。今天想起了那个女孩,拨打了她手机,提示你拨打的号码是空...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条