历史上的今天
今天是: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;
史海拾趣
|
几天前LED3216点阵屏控制板完工(见LED3216点阵屏控制板【图】),一有硬件就迫不及待地尝试写了这个电子钟的程序,很惭愧,移花接木随便搞了下,马上就要回家了,没时间弄了。因为只想搞出现象来,导致程序结构混乱,不具有代表性,升级也困难。以 ...… 查看全部问答> |
|
求在深圳嵌入式硬件设计...我们要做i.MX51(Arm Cortex A8)产品.请有相关经验者与我联系,合作形式多样可选.谢谢!!!QQ705489316 要做的产品为:10.1寸的带触摸屏的平板电脑(类似于iPad) … 查看全部问答> |
|
这是警告 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 ...… 查看全部问答> |
|
http://topic.eeworld.net/u/20090807/18/56aa3841-49c4-486a-813e-c639c0e05214.html?41788,从您的回复中看出我们问题很相识,希望得到回复,给您发消息未见回复。… 查看全部问答> |
|
欢迎进入嵌入式软件开发网站讨论单片开发的相关问题 嵌入式软件开发网站首页 http://www.embeddedsoft.cn/ 嵌入式软件开发网站论坛 http://www.embeddedsoft.cn/bbs… 查看全部问答> |
|
想在虚拟机里建个WIN98的驱动开发环境,不知需要准备那些工具? 本来买本教材,不幸的是它里面是用ms v7.0、masm及98DDK来讲解例子的。我从网上找到的98DDK和书里用的DDK还有点不一样。另外我想在虚拟机上做驱动开发调试不知该怎么做?… 查看全部问答> |
|
Bit-banding技术, 即给每个bit位建立一个对应的别名,通过别名来直接访问此bit 1MB的RAM给了32MB的别名空间,一个Byte也就需要8个别名,却给了32个空间,所以将别名空间的低2位不用,常为0.这样就使1MB的RAM空间和32MB的别名空间一一对应了. &n ...… 查看全部问答> |
|
瓦斯监测对于煤矿安全具有重要作用, 煤矿井下终端和监控分站之间的通信对完成瓦斯监测任务起到重要作用 。本系统采用低功耗单片机 MS P 4 3 0 F 1 4 7和 R S 4 8 5总线完成煤矿井下监控分站与远程终端的通信。传感器检测到的瓦斯浓度 ...… 查看全部问答> |
|
没什么基础,但还是动手做点东西。 一个传感器,返回高低电平(高4.7v 低0.2v) 想用单片机读取返回信号。 可是发现,直接用单片机管脚接开发板上的VCC,单片机可以检测到高电平啊,但是接传感器的返回信号就是无法识别的样子,用电 ...… 查看全部问答> |




