打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
(转)HT66F50的应用

HT66F50的应用

(2011-04-17 21:28:55)
标签:

杂谈

分类: 单片机学习笔记

今年有些意外,还得研究研究HT66F50。PDF里面已经讲解了它强大的功能,这里我就不讲了。(个人觉得我这种条件下使用,芯片上没有集成串口通信,有点遗憾。)

下面我简单介绍一下我在使用的过程中遇到的一些和46F49E/46RU232之间的区别:

一、使用过程的区别:

1.从新开发环境IDE-3000中集成的头文件来看,66F50只给出了相应寄存器的入口地址申明,而并没有像其他两款芯片的头文件一样给出每一个I/O的申明,这使得在使用过程中很是不方便(个人觉得)。因此不得不在使用之前,自己将对应的I/O在头文件申明一遍。

2.66F50引脚的重置功能更加强大。--这也导致在使用过程中对相应寄存器的设置变得更加复杂,不过习惯和熟悉了就好。

3.从个人学习和使用条件上而言,这款芯片上没有集成串口功能,有点遗憾。不过这也符合盛群公司在芯片命名上的特点。比如HT46F49E和HT46RU232两款芯片中,前者就是不带串口功能,而后者则带有串口功能。

二.下面就举一个简单的例子吧。

利用HT66F50在12864上显示一个'1'、***本程序是在其他程序中截取的一部分,看起来有些凌乱和多余。

#include "HT66F50.h"
#defineen       _pb3   //PB3   --12864使能端口定义
#definers       _pb4   //PB4
#definerw       _pa0   //PB5
#defineCY       _c       //进位


void delay(unsigned int t)
{
    unsigned intx;
   for(;t>0;t--)
       for(x=110;x>0;x--);
}

void com(unsigned charcom)    
{
    unsignedchar i;
   delay(2);
   rs=1;         //拉高控制,准备写数据
   for(i=5;i>0;i--) //先写5个1
    {
       rw=1;
       en=1;
       en=0;
    }
   for(i=3;i>0;i--) //写3个0 写指令控制
    {
       rw=0;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--) //写高4位
    {
       com=com<<1;
       rw=CY;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--) //再写4个0
    {
       rw=0;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--) //写低4位
    {
       com=com<<1;
       rw=CY;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--) //写4个0
    {
       rw=0;
       en=1;
       en=0;
    }
    rs=0;
}


void dat(unsigned chardat)    
{
    unsignedchar i;   
   delay(2);
    rs =1;
   for(i=5;i>0;i--) //先写4个1
    {
       rw=1;
       en=1;
       en=0;
    }
   for(i=3;i>0;i--) //RW   写数据控制
    {
       rw=!rw;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--)  //写高4位数据
    {
       dat=dat<<1;
       rw=CY;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--) //写4个0
    {
       rw=0;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--)  //写低4位数据
    {
       dat=dat<<1;
       rw=CY;
       en=1;
       en=0;
    }
   for(i=4;i>0;i--)  //再写4个0
    {
       rw=0;
       en=1;
       en=0;
    }
   rs=0;  //拉低,数据写完
}

void LCD_string(unsigned char *p)
{
   while(*p)
    {
       dat(*p);
       p++;           
    }
}


void init12864()
{
   com(0x01);//清屏
   delay(5);
   com(0x30);//写控制字0x30
   delay(5);
   com(0x30);
   delay(5);
   com(0x0c);//写显示状态
   delay(5);
   com(0x01);//写清屏指令
   delay(5);
   com(0x06);   
}

void init()
{
   _smod=0x01;           //使用FH作为时钟
   _pbc=0x00;            //设置pb口为输出模式
   _pbpu=0xff;           //带上拉电阻   
   _pac=0xff;           //PA口全部用于输入
   _papu=0xff;           //PA口带上拉电阻       
}

void main()
{
   init();                //初始化单片机
   init12864();           //初始化12864
   com(0x01);             //清屏
   delay(5);
   com(0x83);             //写入显示地址
   delay(5);
   dat('1');              //写入数据
   while(1);
}

要写的东西太多了,基于时间的关系,现在就只能写到这里了,以后有时间再写吧!

*********************************转载请注明出处***************************************

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
18B20温度1602显示
LCD12864驱动程序
红外遥控怎么做?看完这篇你该试试手
lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图
单片机如何根据LCD时序图来写底层驱动
LCD1602液晶使用介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服