历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | PT6311 HT1628的avr单片机详细例程

2019-10-17 来源:51hei

PT6311 HT1628的详细例程,连续地址读写,按键扫描,LED显示都有详细的例程包。欢迎交流,例程都经过了验证是OK的。


单片机源程序如下:

/*----------------------------------------------------------------------------*/

// Tools   : ICC-AVR6.31A

// File    : Main.C

// Target  : M8

// Crystal : 8.000MHz

// Date    : 2015-03-13 18:36:18

// Amend   : 2015-03-16 11:26:09

// Function: ET6226-LED、HT1628-LED、PT6311-VFD面板测试

// Notes   : 5P/6P、7P/8P接口, 效果灯控制, IR接收自动测试



/*----------------------------------------------------------------------------*/

// 包含头文件

#include

#include

#include "ICCAVRMACRO.H"    // AVR 宏定义

#include "ICCAVRIO.H"       // IO口配置

#include "Timer2.H"         // 38K载波调制

#include "FD650.H"          // ET6226 驱动

#include "HT1628.H"         // HT1628 驱动

#include "PT6311.H"         // PT6311 驱动



/*----------------------------------------------------------------------------*/

// 数据区

unsigned char IR_PASS[4] = {19, 10,  5,  5};    // "PASS"

unsigned char IR_FAIL[4] = {15, 10,  1, 17};    // "FAIL"



/*----------------------------------------------------------------------------*/

// 函数声明

void Delay_1mS(void);

void Delay_mS(unsigned int n);

void GPIO_Init(void);

void Boot_Show(void);

// ET6226

void IR_Test_ET6226(void);

void Device_Test_ET6226(void);

unsigned char Device_Check_ET6226(void);

// HT1628

void IR_Test_HT1628(void);

void Device_Test_HT1628(void);

unsigned char Device_Check_HT1628(void);

// PT6311

void IR_Test_PT6311(void);

void Device_Test_PT6311(void);

unsigned char Device_Check_PT6311(void);



/*----------------------------------------------------------------------------*/

// 延时函数定义

void Delay_1mS(void)    // 8MHz

{

    unsigned char i, j = 9;

    do{i = 221; do{i--;}while(i); j--;}while(j);

}


void Delay_mS(unsigned int n)

{

    while(n--)

    {

        Delay_1mS();

    }

}



/*----------------------------------------------------------------------------*/

// GPIO初始化

void GPIO_Init(void)

{

    DDRB = 0x00;    // 输入

    DDRC = 0x00;

    DDRD = 0x00;


    PORTB = 0xFF;   // 上拉

    PORTC = 0xFF;

    PORTD = 0xFF;

    

    LED_B_OUT;      // 输出

    LED_B_OFF;      // 蓝灭

    

    LED_IR_OUT;     // 输出

    LED_IR_OFF;     // IR关

}



/*----------------------------------------------------------------------------*/

// LED 闪烁指示

// num: 闪烁次数

void LED_Blink(unsigned char num)

{

    while(num--)

    {

        LED_B_ON;  Delay_mS(150);

        LED_B_OFF; Delay_mS(150);

    }

}



/*----------------------------------------------------------------------------*/

// 系统初始化

void Boot_Show(void)

{

    GPIO_Init();    // GPIO 初始化

    TC2_Init();     // TIMER2 初始化

    LED_Blink(2);   // LED闪烁、等待上电稳定

}



/*----------------------------------------------------------------------------*/

// 主函数

void main(void)

{

    unsigned char device = NULL;


    Boot_Show();

    

        while(1)

        {

        FD_Init();                      // 初始化 ET6226

        device = Device_Check_ET6226(); // 设备检测 ET6226

        if(device)                      // 有设备插入

        {

            Device_Test_ET6226();       // 设备测试

        }

        

        HT_Init();                      // 初始化 HT1628

        device = Device_Check_HT1628(); // 设备检测 HT1628

        if(device)                      // 有设备插入

        {

            Device_Test_HT1628();       // 设备测试

        }

        

        VFD_Init();                     // 初始化 PT6311

        device = Device_Check_PT6311(); // 设备检测 PT6311

        if(device)                      // 有设备插入

        {

            Device_Test_PT6311();       // 设备测试

        }

        

        Delay_mS(500);                  // 每隔0.5S检测一次是否有设备插入

        }

}



/*----------------------------------------------------------------------------*/

// 设备检测

// ret: ( 0 ~ 1 ) 0 = no, 1 = yes

unsigned char Device_Check_ET6226(void)

{

    unsigned char Input_device;

    unsigned char FD_Ack = 1;


    FD_IIC_Start();                     // 开始总线

    FD_IIC_Write_8bits(FD650_GET_KEY);  // 写入指令0x4F

    FD_Ack = FD_IIC_Get_Ack();          // 接收应答位

    FD_IIC_Read_8bits();                // 读出数据

    FD_IIC_Set_Ack(1);                  // 发送应答位,不应答,接收数据结束

    FD_IIC_Stop();                      // 结束总线


    if(FD_Ack)  { Input_device = NULL; }// 无设备插入

    else        { Input_device = TRUE; }// 有设备插入


    return (Input_device);

}



/*----------------------------------------------------------------------------*/

// IR接收测试

void IR_Test_ET6226(void)

{

    unsigned char i;

    unsigned char IR_high_level;// IR 采样高电平个数

    unsigned char IR_status;    // IR 初始状态

    

    IR_high_level = 0;      // 初始化数据

    FD_UnInit();            // SDA设置为输入

    Delay_mS(10);           // 延时等待电平稳定

    

    for(i = 0; i < 20; i++) // 采样20个点(20 * 5mS = 100mS)

    {

        Delay_mS(5);        // 延时

        if(FD_SDA_TST)      // 采样

            IR_high_level++;// 正常

    }

    if(IR_high_level >= 5)  // 至少有5个高电平

    {

        IR_status = 1;      // 正常

    }

    else

    {

        IR_status = 0;      // 短路

    }

    

    TC2_START();            // 38K ON

    Delay_mS(50);           // 延时

    

    if(IR_status)

    {

        if(!FD_SDA_TST)     // IR 接收成功OK

        {

            FD_LED_ON;      // 效果灯亮

            FD_Power_Led(0);// 红灯灭

            FD_Lock_Led(1); // 绿灯亮

            FD_Background_Led(1);   // 蓝灯亮

            FD_Prints(IR_PASS, 1);

        }

        else                // IR 接收失败NG

        {

            FD_LED_OFF;     // 效果灯灭

            FD_Power_Led(1);// 红灯亮

            FD_Lock_Led(0); // 绿灯灭

            FD_Background_Led(0);   // 蓝灯灭

            FD_Prints(IR_FAIL, 1);

        }

    }

    else                    // IR 对地短路

    {

        FD_LED_OFF;         // 效果灯灭

        FD_Power_Led(1);    // 红灯亮

        FD_Lock_Led(0);     // 绿灯灭

        FD_Background_Led(0);   // 蓝灯灭

        FD_Prints(IR_FAIL, 1);

    }


    TC2_STOP();             // 38K OFF

    LED_IR_OFF;

}



/*----------------------------------------------------------------------------*/

// 设备测试

void Device_Test_ET6226(void)

{

    unsigned char i;

    unsigned char tmp;

    unsigned char device;       // 检测设备

    unsigned char led_status;   // LED状态

    unsigned char key_val[4];   // 按键数据 显示用

    unsigned char key;          // 按键键值 检测用

    

    LED_Blink(1);               // 设备插入指示

    // ----------------------------------

    // 变量初始化

    {

        for(i = 0; i < 4; i++)

        {

            key_val[i] = 0x00;

        }

        i   = 0;

        key = 0;

        tmp = 0;

推荐阅读

史海拾趣

Gennum ( Semtech )公司的发展小趣事
确保所有元件都已正确安装,没有损坏或接错。
Diodes Incorporated公司的发展小趣事

在公司的发展过程中,Diodes Incorporated与富昌电子建立了长期稳定的合作关系。富昌电子作为Diodes Incorporated的全球分销商之一,不仅为公司提供了广阔的市场渠道,还在产品推广和技术支持等方面给予了大力支持。这种紧密的合作关系,不仅促进了双方业务的共同发展,也为Diodes Incorporated在电子行业中树立了良好的品牌形象。

Cygnal Integrated Products Inc公司的发展小趣事

随着市场的不断发展和竞争的加剧,Cygnal意识到需要通过收购来加速其技术和市场的布局。经过一系列谈判和协商,Cygnal成功收购了另一家专注于嵌入式系统技术的公司。这次收购不仅为Cygnal带来了更多的技术和市场资源,还使其能够更好地满足客户的需求并提供更全面的解决方案。收购后,Cygnal通过内部整合和优化,将两家公司的优势融合在一起,形成了更强大的市场竞争力。

Bkc Semiconductors Inc公司的发展小趣事

Bkc Semiconductors Inc最初是一家专注于半导体技术研发的小型创业公司。在公司成立的初期,团队通过不懈的努力,成功研发出了一款具有高性价比的功率半导体芯片,该芯片在能效和稳定性上均达到了行业领先水平。这一技术突破使得Bkc的产品迅速获得了市场的认可,公司开始逐渐在电子行业中崭露头角。

Excellence Optoelectronics Inc公司的发展小趣事

EOI始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到生产流程,再到产品检测,每一个环节都严格把控。同时,EOI还注重员工的培训和教育,提高员工的质量意识和技能水平。这些努力使得EOI的产品质量得到了客户的广泛认可,公司也因此树立了良好的品牌形象。

Gruner AG公司的发展小趣事
在输入侧给LED施加一定电流,同时测量输出侧光电晶体管的集电极电流,从而计算出CTR值。CTR值应与数据手册中的标称值相符。

问答坊 | AI 解惑

LED3216“大屏电子钟”V1.0发布【图】

几天前LED3216点阵屏控制板完工(见LED3216点阵屏控制板【图】),一有硬件就迫不及待地尝试写了这个电子钟的程序,很惭愧,移花接木随便搞了下,马上就要回家了,没时间弄了。因为只想搞出现象来,导致程序结构混乱,不具有代表性,升级也困难。以 ...…

查看全部问答>

求在深圳嵌入式硬件设计者(个人),急急急!...

求在深圳嵌入式硬件设计...我们要做i.MX51(Arm Cortex A8)产品.请有相关经验者与我联系,合作形式多样可选.谢谢!!!QQ705489316 要做的产品为:10.1寸的带触摸屏的平板电脑(类似于iPad) …

查看全部问答>

用PB5制作CE系统时出错

这是警告 BUILD: [00:0000000008:WARNS ] Directory: E:\\WINCE500\\PRIVATE\\OSINTERNAL\\TEST\\HAL\\ does not exist. BUILD: [00:0000000020:WARNS ] Directory: E:\\WINCE500\\platform\\common\\src\\inc E:\\WINCE500\\public\\common\\o ...…

查看全部问答>

请教Cherishny兄

http://topic.eeworld.net/u/20090807/18/56aa3841-49c4-486a-813e-c639c0e05214.html?41788,从您的回复中看出我们问题很相识,希望得到回复,给您发消息未见回复。…

查看全部问答>

嵌入式软件开发网论坛 单片机开发

欢迎进入嵌入式软件开发网站讨论单片开发的相关问题 嵌入式软件开发网站首页 http://www.embeddedsoft.cn/ 嵌入式软件开发网站论坛 http://www.embeddedsoft.cn/bbs…

查看全部问答>

WinCE下开发GIS怎样快速绘制

用GDI绘图速度不能满足要求,请问有没有更好的方法绘图啊,谢谢啦…

查看全部问答>

想在虚拟机里建个WIN98的驱动开发环境,不知需要准备那些工具?

本来买本教材,不幸的是它里面是用ms v7.0、masm及98DDK来讲解例子的。我从网上找到的98DDK和书里用的DDK还有点不一样。另外我想在虚拟机上做驱动开发调试不知该怎么做?…

查看全部问答>

LM3S中断Bit-banding技术

Bit-banding技术, 即给每个bit位建立一个对应的别名,通过别名来直接访问此bit 1MB的RAM给了32MB的别名空间,一个Byte也就需要8个别名,却给了32个空间,所以将别名空间的低2位不用,常为0.这样就使1MB的RAM空间和32MB的别名空间一一对应了. &n ...…

查看全部问答>

【MSP430共享】激光瓦斯监控系统显示终端的研究

瓦斯监测对于煤矿安全具有重要作用, 煤矿井下终端和监控分站之间的通信对完成瓦斯监测任务起到重要作用 。本系统采用低功耗单片机 MS P 4 3 0   F 1 4 7和 R S 4 8 5总线完成煤矿井下监控分站与远程终端的通信。传感器检测到的瓦斯浓度 ...…

查看全部问答>

大一新手求前辈指导一问题

没什么基础,但还是动手做点东西。 一个传感器,返回高低电平(高4.7v  低0.2v) 想用单片机读取返回信号。 可是发现,直接用单片机管脚接开发板上的VCC,单片机可以检测到高电平啊,但是接传感器的返回信号就是无法识别的样子,用电 ...…

查看全部问答>