第一课时
1、Holtek公司编译器HT-IDE3000使用说明
(1)双击打开HT-IDE3000,进入编译器的界面,见下图:
(2)单击“工程”——>选择“新建”,弹出下图窗口;
    ——Project Name:新建项目文件的名称,不建议使用中文名称;
——Project Location:项目文件存放的位置,勾选“Create directory for project”后,会自动建立一个文件夹,项目文件都存放在此文件夹内;
——Project MCU:单片机的型号;
——Choose Language Tool:选择编程语言,这里选择“V2”版本的C语言。
(3)点击下一步,选择“.C”;
(4)点击下一步,再点击下一步,点击OK,然后弹出“配置选项”,配置选择只要是对单片机一些功能和特性进行设置,例如工作电压,工作频率,看门狗等;
(5)配置选项设置完后,点击OK,再点击确定,那么新的工程就建立完毕了。
2、C语言程序设计
(1)主函数
每个程序只有一个主函数,程序是从主函数开始执行。
格式:void main()
        {
}
例子:
    #include "HT66F40.h"
void main()            //程序从这里开始跑
{
        _nop();            //语句1
        _nop();            //语句2
        _nop();            //语句3
}
功能说明:程序执行的顺序,语句1—>语句2—>语句3。
(2)子函数
一个程序包含各种功能,如果每种功能都做成一个子函数,那么整个程序的架构实现了模块化。
例如,LCD的开启,显示及关闭这三个功能可以分别做成三个独立的子函数。
使用子函数的步骤:
c语言编译器ide代码编辑1 编写子函数的功能
void TurnOn_LCD()            //LCD开启子函数,TurnOn_LCD是函数的名称
{
    _nop();                //这里先用空指令代表子函数的功能
    _nop();                //这里先用空指令代表子函数的功能
}
2 声明子函数,告诉单片机有这个子函数存在
void TurnOn_LCD();
技巧:直接把步骤 的第一行复制过来,然后在后面加上分号;
3 调用子函数
TurnOn_LCD();
         
          例子:
            #include "HT66F40.h"
void TurnOn_LCD();        //声明子函数,告诉单片机有这个子函数存在
void TurnOff_LCD();        //声明子函数,告诉单片机有这个子函数存在
void display_LCD();        //声明子函数,告诉单片机有这个子函数存在
void main()
{
    _nop();                //空指令
    _nop();                //空指令
    _nop();                //空指令
while(1)              //while循环结构,当小括号里内容为真,执行
    {                    //while大括号里的内容
        TurnOn_LCD();      //调用LCD开启子函数
        display_LCD();        //调用LCD显示子函数
        TurnOff_LCD();    //调用LCD关闭子函数   
    }
}
void TurnOn_LCD()        //编写子函数的功能,LCD开启子函数,TurnOn_LCD是
{                  //函数的名称
    _nop();            //这里先用空指令代表子函数的功能
    _nop();            //这里先用空指令代表子函数的功能
}
void TurnOff_LCD()        //编写子函数的功能,LCD关闭子函数,TurnOff_LCD是
{                    //函数的名称
    _nop();            //这里先用空指令代表子函数的功能
    _nop();            //这里先用空指令代表子函数的功能
}
void display_LCD()        //编写子函数的功能,LCD显示子函数,display_LCD是
{                    //函数的名称
    _nop();            //这里先用空指令代表子函数的功能
    _nop();            //这里先用空指令代表子函数的功能
}
(3)中断子函数
使用中断子函数的步骤:
1 相关寄存器进行初始化(请查阅相关型号IC的PDF)
2 声明中断子函数地址
格式:#pragma vector 中断子函数名称 @中断入口地址
例如:
        #pragma vector    isr_tm0    @0x14
3 编写中断子函数的功能
例如:
        void isr_tm0()
        {
            }
          例子:
#include "HT66F40.h"
#pragma vector isr_tm0 @0x14    //声明中断子函数的入口地址
void mcu_init();                //声明单片机初始化子函数
void main()
{
                mcu_init();
        while(1)                //while循环结构,当小括号里内容为真,执行while
                {                    //大括号里的内容
                    _nop();
                    _nop();   
                }
}
void isr_tm0()        //编写中断子函数的功能
{
                _t0af=0;        //清除中断标志位   
                _nop();        //这里先用空指令代表中断子函数的功能
}
void mcu_init()    //编写单片机初始化子函数
{
//定时器相关寄存器初始化
                _tm0c0=0b00000000;    //定时器计数时钟fsys/4=1Mhz,fsys=4Mhz为系统
                                    //频率
                _tm0c1=0b11000001;    //选择定时计数工作模式,
//清0计数器的条件:与比较器A匹配,即
//计数值与tm0al,tm0ah的值相等时,计数器清0)
                _tm0al=0xe8;            //0x03e8=1000
                _tm0ah=0x03;
                _t0on=1;                //启动定时器
//定时器中断相关寄存器初始化
                _emi=1;        //总中断控制位,0-关闭 1-开启       
                _mf0e=1;    //多功能中断0控制位,0-关闭 1-开启
                _t0ae=1;    //TM0比较器A匹配中断控制位,0-关闭 1-开启
}
           
(4)函数的返回值及参数的介绍
1  无返回值,无参数函数:前面介绍的函数均为无返回值无参数函数。
例如:
        void main()
        {
            }
        void表示此函数是“空类型”(无返回值),void是“空”的意思,即执行
此函数后不产生一个函数值。
2    有返回值,有参数函数
例如:
            程序功能说明:
参数的传递:调用函数时,程序把a赋值给x,b赋值给y;因为a和b的数据类型是u8,所以参数x和y的数据类型也是u8。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。