网购了一块TTP229的触摸模块。模块中实际使用的是8229BSF集成块。本人用STC89C52搭建了测试电路。用12864液晶显示。
显示01-16,表示16个按钮的对应值。
制作出来的实物图如下:
单片机源程序如下:
/*********************************************************************************
* 【作 者】:
* 【版 本】:
* 【函数功能】: 利用单线制DS18B20温度传感器, 并在液晶12864上显示
**********************************************************************************/
#include #include #include #include #include #define uchar unsigned char #define uint unsigned int // 液晶现实属区区 uchar code pic1[]; uchar code pic2[]; uchar code pic3[]; /* 液晶控制接口 -----------------------------------------------*/ sbit RS = P0^7; sbit WRD = P0^6; sbit E = P0^5; sbit PSB = P0^4; sbit RES = P0^3; sbit sign = P1^0; sbit sign1 = P1^1; // TTP229接口 sbit SDA=P1^2; sbit SCL=P1^3; // 温度传感器接口 sbit DQ=P3^7; //数据传输线接单片机的相应的引脚 /* 温度测量用变量定义 -----------------------------------------------*/ unsigned char tempL=0; //设全局变量 unsigned char tempH=0; unsigned int sdate;//测量到的温度的整数部分 unsigned char xiaoshu1;//小数第一位 unsigned char xiaoshu2;//小数第二位 unsigned char xiaoshu;//两位小数 bit fg=1; //温度正负标志 // 液晶处理函数 void TransferData(char data1,bit DI); void display(void); void display_grapic(void); void delayms(uint n); void DisplayLine(uchar line1,uchar line2); void DisplayGraphic(uchar *adder); void delay(uint m); void lcd_mesg(uchar *adder1); void delay1ms(unsigned int t); // 18B20温度传感器函数 void ReadTemperature(void); void Init_DS18B20(void); unsigned char ReadOneChar(); void WriteOneChar(unsigned char dat); void Delay10us(unsigned int t); void Initial_com(void); // 扫描TTP229电容触摸键盘模块 unsigned int TTP229B(void); /******************************************************************** * 名称 : Convert(uchar In_Dat) * 功能 : 因为电路设计时,P2.0--P2.7接法刚好了资料中的相反,所以设计该函数。 * 输入 : 1602资料上的值 * 输出 : 送到1602的值 ***********************************************************************/ unsigned char Convert(uchar In_Dat) { uchar i, Out_Dat; for(i=0; i<8; i++){ Out_Dat= In_Dat; } return Out_Dat; } void initinal(void) { //LCD字库初始化程序 delay(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 delay(1); //延时 RES=0; //复位 delay(1); //延时 RES=1; //复位置高 delay(10); TransferData(0x30,0); //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF delay(100); //大于100uS的延时程序 TransferData(0x30,0); //Function Set delay(37); ////大于37uS的延时程序 TransferData(0x08,0); //Display on Control delay(100); //大于100uS的延时程序 TransferData(0x10,0); //Cursor Display Control光标设置 delay(100); //大于100uS的延时程序 TransferData(0x0C,0); //Display Control,D=1,显示开 delay(100); //大于100uS的延时程序 TransferData(0x01,0); //Display Clear delay(10); //大于10mS的延时程序 TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移动 delay(100); //大于100uS的延时程序 } /******************************************************************** * 名称 : initina2() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void initina2(void) //LCD显示图片(扩展)初始化程序 { delay(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 delay(1); //延时 RES=0; //复位 delay(1); //延时 RES=1; //复位置高 delay(10); TransferData(0x36,0); //Extended Function Set RE=1: extended instruction delay(100); //大于100uS的延时程序 TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction set delay(37); ////大于37uS的延时程序 TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1) delay(100); //大于100uS的延时程序 TransferData(0x01,0); //CLEAR SCREEN delay(100); //大于100uS的延时程序 } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main(void) { uchar init18B20[]={ "温度传感器18B20 " "初始化中...... " " " " " }; uchar curtemp[]={ "当前温度: " " " " " " " }; uchar IC_DAT2[]={ "白日依山尽, " //0x80 "欲穷千里目, " //0x90 "黄河入海流。 " //0x88 "更上一层楼。 " //0x98 }; unsigned int key=0; // 初始化串口 Initial_com(); initinal(); //调用LCD字库初始化程序 delay(100); //大于100uS的延时程序 lcd_mesg(IC_DAT2); //显示中文汉字2 delayms(80); sign = 0; // 显示温度传感器18B20初始化中 initinal(); //调用LCD字库初始化程序 delay(100); //大于100uS的延时程序 lcd_mesg(init18B20); //显示中文汉字1 delay(240); delay(240); Init_DS18B20(); //初始化 sign = 1; delayms(80); SDA=1; SCL=1; while(1) { sign1 = 0; // 初始化温度传感器并取得当前温度 ReadTemperature(); sign1=1; SBUF=sdate; delayms(20); SBUF=xiaoshu; // 转换温度数据为字符串 // 整数部分 curtemp[10]=48+sdate/10; curtemp[11]=48+sdate%10;
上一篇:单片机按键&串口控制步进电机正反转调速含程序和仿真
下一篇:AT89S52单片机16LED摇摇棒设计
推荐阅读
史海拾趣
纳米是一种长度单位,纳米材料的尺寸非常小,一纳米等于十亿分之一米,千分之一微米。所谓纳米技术,就是以纳米尺度为研究对象的新技术。纳米技术通过操纵原子、分子、原子团、分子团使其重新排列组合,形成新的物质,制造出具有新功能的机器。由于 ...… 查看全部问答∨ |
|
大家好,之前使用友善的开发板,带3.5寸NEC竖屏,;现在采用核心板直接点屏,选了信利的3.5寸横屏,两家屏的LCD驱动芯片应该是不一样的。我现在按照对应的线已经接好了,但是屏幕黑屏,信利的屏用的是HX8238-A,要通过SPI口初始化。 问题一 像这样 ...… 查看全部问答∨ |
|
1.求支持VxWorks的开发板型号? 2.能否讲讲整个基于类似这种开发的软硬件环境,有哪些环节? 本人对这块较有兴趣,但苦于无从下手,有请大侠指点迷津,不甚感激.… 查看全部问答∨ |
|
lm3s9b92的芯片我参照论坛里面的帖子,linker没动,startup.s也没动。就添加了一个ini脚本文件,结果还是不行。脚本文件内容如下:Load blinky.AXF incrementalFUNC void Setup (void) { _WDWORD(0xE000ED08,0x20000000); SP = _RD ...… 查看全部问答∨ |
自己用MSP430F149做了块板子,用来采集数据,现在片内AD转换出的数据就第一个还接近于被测值,其余的AD转换的数据都在2V左右,很纳闷,不知道原因,望高手指点啊!!… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 【迎新迎国庆】dcexpert带你“全栈”动手搞:基于ESP8266可充电的触控创意LED灯
- 泰克完整LED驱动测试方案 领跑节能亮化新时代
- [有奖转发]Vishay新能源、航天/军工解决方案
- 【EE团】开抢啦!!!TI超值工业级模拟器件套装芯片再次登场!!!
- 有奖直播|TI 符合 USB 2.0 标准的最新隔离器件
- 直播已结束【ST 宽禁带高性能碳化硅(SiC)与氮化镓(GaN)产品技术及不同应用案例分享】(9:30入场)
- 来英飞凌旗舰店,探寻秋日好物!
- EEWORLD下载中心热力上线,岂能无礼!
- 有奖下载:邂逅大师——福禄克全新专家级红外热像仪
- 1月22日下午14:00Mouser携手Maxim邀您观看有奖直播:深入浅出可穿戴健康监测