




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include ht66fu50_uart.h#include ht66fu50_main.h#define step1 LED1=0;LED2=1;LED3=1;LED4=1;#define step2 LED1=0;LED2=0;LED3=1;LED4=1;#define step3 LED1=1;LED2=0;LED3=1;LED4=1;#define step4 LED1=1;LED2=0;LED3=0;LED4=1;#define step5 LED1=1;LED2=1;LED3=0;LED4=1;#define step6 LED1=1;LED2=1;LED3=0;LED4=0;#define step7 LED1=1;LED2=0;LED3=1;LED4=0;#define step8 LED1=0;LED2=0;LED3=1;LED4=0;#pragma rambank0bit uart_cmd;/ software delay functionvoid delay(ulong x) while(x-) _delay(120); void mydelay(unsigned long x) /延时函数unsigned long i; while(x-) _delay(100);/初始化HT66FU50void MCU_init(void) /TM0、TM1(定时器)除能_tmpc0 = 0x00;/TM2、TM3(定时器)除能 _tmpc1 = 0x00;/屏蔽pa7-pa0的A/D输入功能 _acerl = 0x00; /屏蔽pa0、pa2、pa3的比较器0的输入/出功能 _cp0c = 0x00; /屏蔽pa5、pc2、pc3的比较器1的输入/出功能 _cp1c = 0x00; /pb口全部设置为输出模式 _pbc = 0x00; /pe口全部设置为输出模式 _pec = 0x00; /置pa4pa7为输入状态,pa0pa3为输出状态_pac = 0xf0;/置pa口全部为高电平 _pa = 0xff;/按键(pa4pa7)加上拉电阻 _papu = 0xf0; /设置pc口为输入状态 _pcc = 0xfe; / set buzzer control port to output _pcc0 = 0; _pfc = 0x00; _pf = 0xFF; / set 液位 onewire port to output _pcc7 = 1; _pcc6 = 1; / add Pull-up resistor for DS18B20 DQ pin _pcpu7 = 1; _pcpu6 = 1;/ 多功能中断2中断向量,UART使用这个中断向量 #pragma vector uart_receive_interrupt 0x20;/#include ht66fu50_test.h#pragma rambank0bit temp_setting;extern bit uart_cmd;uchar uart_send_buf10;uchar uart_receive_buf3;uchar uart_receive_cnt;const uchar string_start=nrTEST-STARTING.nr;const uchar string_ok=OKnr;const uchar string_bad=BADnr;const uchar string_exit=EXITnr;const uchar string_end=0x1a,0x0d,0x0a;union ucharusr;structuchar txif:1;uchar tidle:1;uchar rxif:1;uchar ridle:1;uchar oerr:1;uchar ferr:1;uchar nf:1;uchar perr:1;Flag;Register;/ 串行口中断处理程序void uart_receive_interrupt(void)uchar val;_emi =0;_mf2f=0;/ 检查外围中断标志if(_xpf)_xpf=0;Register.usr = uart_read_reg(uchar)ReadUSR);/ 上一个串行口命令处理完否if(uart_cmd)_emi = 1;return;/ 检查中断标志和中断接收标志if(Register.Flag.rxif = 1) & (Register.Flag.ridle=1)/ 读SPI接收缓存器内容val = uart_read_reg(uchar)ReadFIFO);uart_receive_bufuart_receive_cnt = val;if(uart_receive_cnt=0)if(val = H)uart_receive_bufuart_receive_cnt = val;uart_receive_cnt+;else if(uart_receive_cnt=1)if(val = i)uart_receive_bufuart_receive_cnt = val;uart_receive_cnt+;elseuart_receive_cnt=0;else if(uart_receive_cnt=2) if(val = !)uart_receive_bufuart_receive_cnt = val; uart_cmd = TRUE;uart_receive_cnt=0;else uart_receive_cnt=0;elseuart_receive_cnt=0;_emi = 1;void uart_init(void)uchar tmp=0xFF;/ Initialation of SPI/由于HT66FU50 内建的UART 功能,是通过内部SPI 与UART Bridge IC 连接实现的,/因此在使用UART 前,必须正确配置SPI 的Pin-remapping 功能,通过寄存器PRM0 将SPI 引脚/设为与内部UART 连接,具体设定如下:/ PRM0寄存器中的SIMPS1=0、SIMPS0=1、PCKPS=1,/设定完后,将SIMC0寄存器中的SIMEN 设定为1,MCU 就可以通过SPI 使用UART 功能了/ 对应位名称: C1XPS0 C0XPS0 PDPRM SIMPS1 SIMPS0 PCKPS/ SIMPS1,SIMPS0:SIM 引脚重置控制位/ 00:SDO on PA5;SDI/SDA on PA6;SCK/SCL on PA7;SCS on PB5/ 01:SDO on PD3;SDI/SDA on PD2;SCK/SCL on PD1;SCS on PD0/ 10:SDO on PB6;SDI/SDA on PB7;SCK/SCL on PD6;SCS on PD7/ 11:未定义/ 引脚重置寄存器 设置SIMPS1=0、SIMPS0=1、PCKPS=1_prm0 = 0x03;/ 对应的位名称:D7 D6 CKPOLB CKEG MLS CSEN WCOL TRF_simc2 =0x08;/ 对应的位名称:SIM2 SIM1 SIM0 PCKEN PCKP1 PCKP0 SIMEN / 要求:SIM2 SIM1 SIM0/ 000:SPI 主机模式;SPI 时钟为fSYS/4/ 001:SPI 主机模式;SPI 时钟为fSYS/16/ 010:SPI 主机模式;SPI 时钟为fSYS/64/ 011:SPI 主机模式;SPI 时钟为fTBC/ 100:SPI 主机模式;SPI 时钟为TM0 CCRP 匹配频率/2/ 101111:未使用_simc0 =0x12;/ UART resetuart_write_reg(uchar)WriteUCR3,(uchar)0x80);/ 8 N 1 format 使能TXuart_write_reg(uchar)WriteUCR1,(uchar)0x80);/ baud rate 9600 by BRGH=1 and Fosc= 3579545uart_write_reg(uchar)WriteBRG,(uchar)0x16);/ Interrupt enable rx (disable tx )uart_write_reg(uchar)WriteUCR2,(uchar)0xe4);uart_receive_cnt=0;uart_cmd = FALSE;_xpf=0;_mf2f=0;_xpe=1;_mf2e=1;_sime = 0;void uart_write_reg(uchar Command, uchar Data)_trf=0; / 1: 使能_csen=1; / 0: 无写冲突_wcol=0;/写数据至数据寄存器_simd=Command;while(_wcol=1)_wcol=0;_simd=Command;/ trf为发送标志,1:发送结束while(!_trf); _trf=0;_simd=Data;while(_wcol=1)_wcol=0;_simd=Data;while(!_trf);_trf=0;_csen=0;uchar uart_read_reg(uchar Command)uchar val=0x00;/ 1 使能_csen=1;/ 0 无写冲突 _wcol=0; /写数据至数据寄存器_simd=Command; while(_wcol=1)_wcol=0;_simd=Command;/ trf为发送标志,1:发送结束while(!_trf); _trf=0;_simd=val;while(_wcol=1)_wcol=0;_simd=val;while(!_trf);val = _simd;_trf=0;_csen=0;return val;void uart_send_data_buf(void)uchar j=0;/ 发送数据缓存器中的字符串,该字符串以NULL结尾while(1)if(uart_send_bufj=0)j=0x00;_nop();break;Register.usr = uart_read_reg(uchar)ReadUSR);if(Register.Flag.txif=1) uart_write_reg(WriteFIFO,uart_send_bufj); _delay(200); j+;_xpf=0;_mf2f=0;void uart_send_string( uchar sting_type, uchar len)uchar j=0;/ 发送定义好的字符串while(1)Register.usr = uart_read_reg(uchar)ReadUSR);if(Register.Flag.txif=1)switch(sting_type)case STRING_OK: uart_write_reg(WriteFIFO,string_okj); break;case STRING_START: uart_write_reg(WriteFIFO,string_startj); break;case STRING_BAD: uart_write_reg(WriteFIFO,string_badj); break;case STRING_EXIT:uart_write_reg(WriteFIFO,string_exitj); break;case STRING_1: uart_write_reg(WriteFIFO,string_endj); break;default:break;j+; _delay(300); _xpf=0;_mf2f=0;if(j=len)break;void uart_send_string_with_zero(uchar *string)uchar i=0;/ 发送数据缓存器中的字符串,该字符串以NULL结尾while(1) if(*(string+i)=0)break;Register.usr = uart_read_reg(uchar)ReadUSR);if(Register.Flag.txif=1) uart_write_reg(WriteFIFO,*(string+i); _delay(200); i+;_xpf=0;_mf2f=0;void uart_send_char(uchar chr)Register.usr = uart_read_reg(uchar)ReadUSR);if(Register.Flag.txif=1) uart_write_reg(WriteFIFO,chr); _delay(200);_xpf=0;_mf2f=0;void lcd1602_write_cmd(unsigned char cmd) /写指令 RS=0; /写指令模式 RW=0; E=1; _pe = cmd; E=0; /E:1-0 lcd_1602_delay(100);void lcd_1602_delay(unsigned int x) /延迟函数 while(x-) _delay(100);void lcd1602_write_char(unsigned char data) /写入单个字符数据 RS = 1; /写数据模式 RW = 0; E = 1; _pe = data; E = 0; lcd_1602_delay(5);void lcd1602_write_string(unsigned char *s) /写字符串 while(*s != 0) lcd1602_write_char(*s); s+; void lcd1602_set_place(unsigned char line,unsigned char column) /设置字符显示位置 unsigned char address; if(line = 1) address = 0x80 + column; /0x80表示DDRAM地址设置(第1行从00H开始,DB7位为“1”) else if(line = 2) address = 0xc0 + column; /0xc0表示DDRAM地址设置(第2行从40H开始,DB7位为“0”) lcd1602_write_cmd(address); void lcd1602_display_string(unsigned char line,unsigned char column,unsigned char *string) /向1602写入字符串 lcd1602_set_place(line,column); lcd1602_write_string(string);void lcd1602_display_char(unsigned char line,unsigned char column,unsigned char data) /写数据 lcd1602_set_place(line,column); lcd1602_write_char(data);void lcd1602_init(void) /初始化1602液晶 lcd1602_write_cmd(0x06); /输入模式为,字符不动,光标右移(设置输入模式) lcd1602_write_cmd(0x38); /设定两列(功能设置) lcd1602_write_cmd(0x0c); /开启显示屏,不显示光标,光标所在(显示开/关控制)lcd1602_write_cmd(0x01); /清屏的指令应该在液晶初始化最后面一行(清显示) void main()MCU_init();uart_init();/ 开放全局中断_emi = 1;LED1 = OFF;LED2 = OFF;LED3 = OFF;LED4 = OFF; LED7 = OFF while(1) /雨水传感器部分程序 if(S3=0) delay(10); if(S3=0) delay(10); if(S3=0) LED1 = OFF; LED2 = OFF; LED3 = OFF; LED4 = OFF; LED7 = OFF; while(1) step1; delay(4000);/需改时间 step2; delay(4000); step3; delay(4000); step4; delay(4000); step5; delay(4000); step6; delay(4000); step7; delay(4000); step8; delay(4000); /CO泄露报警部分程序 if(S4=0) delay(10); if(S4=0) delay(10); if(S4=0) uart_send_string_with_zero(AT+CMGF=1rn); mydelay(1000); uart_send_string_with_zero(AT+CSCA=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业环保生态合作协议
- 乡村旅游景区投资合同
- 2025青岛水务集团有限公司招聘计划(89人)考试模拟试题及答案解析
- 2025江苏盐城市大丰区教育局部分直属事业单位选调4人考试参考题库及答案解析
- 2025年下半年芜湖市繁昌区卫健系统事业单位公开招聘17名考试模拟试题及答案解析
- 2025四川省妇幼保健院招聘医疗助理20人考试模拟试题及答案解析
- 2025山东东营市莒州路小学招聘劳务派遣教师21人备考考试试题及答案解析
- 青岛理工大学2025年公开招聘人员(4名)备考考试题库附答案解析
- 2025年河北保定蠡县公开招聘教师80名考试模拟试题及答案解析
- 软件定制开发及维护服务协议说明
- 《数控机床概述 》课件
- 培训课件 -华为铁三角工作法完全解密
- 风险管理与保险规划理解保险的作用
- 电网络分析课件
- 《十大销售技巧》课件
- 汽车机械制图中职全套教学课件
- 三对三篮球赛记录表
- 学生模拟政协提案范文
- 新苏教版一年级上册科学学生活动手册答案
- 英语字母衡水体书写(附字帖)
- 《邮轮餐饮服务管理》教学课件-08邮轮餐饮卫生与安全
评论
0/150
提交评论