单片机--uart

    xiaoxiao2022-06-30  50

    利用串口来设置时间并显示在lcd上;设置时间时,利用串口发送一串字符串,例如12-13-12

    uart.c

    #include "myhead.h" xdata unsigned char ch[10] = {0}; xdata unsigned char flag = 0; void uart_init(void) { SCON = 0x50; TMOD |= 0x20;//一定要用异或 TH1 = 0xfd; TR1 =1; EA = 1; ES = 1; } void uart_send_byte(unsigned char byte); void uart_send_str(unsigned char *str); //串口中断函数 void uart_isr() interrupt 4 { static unsigned char i = 0; if(RI) { ES = 0; ch[i] = SBUF; i++; if(9 == i) { ch[i] = '\0'; i = 0; flag = 1; } RI = 0; ES = 1; } } //输出字符 void uart_send_byte(unsigned char byte) { SBUF = byte; while(!TI); TI = 0; } //输出字符串 void uart_send_str(unsigned char *s) { while(*s != '\0') { uart_send_byte(*s); s++; } } void uart() { xdata unsigned char flag1 = 1; xdata unsigned char key; time0_init(); uart_init(); while(flag1) { if(flag) { tempdata[0] = segdata[ch[1] - '0']; tempdata[1] = segdata[ch[2] - '0']; tempdata[2] = 0x40; tempdata[3] = segdata[ch[4] - '0']; tempdata[4] = segdata[ch[5] - '0']; tempdata[5] = 0x3f; tempdata[6] = segdata[ch[7] - '0']; tempdata[7] = segdata[ch[8] - '0']; hour = (ch[1] - '0') * 10 +(ch[2] - '0'); min = (ch[4] - '0') * 10 +(ch[5] - '0'); sec = (ch[7] - '0') * 10 +(ch[8] - '0'); uart_send_str(ch); flag = 0; } key = key_scan(); if(0xe7 == key) { lcd_over(); flag1 = 0; ES = 0; PORT = 0xff; } lcd_dis_time(); } }

    将程序下载到板子上时一定要关闭串口工具。

    uart.h

    #ifndef _UART_H #define _UART_H extern void uart_init(void); extern void uart_isr(); extern void uart_send_byte(unsigned char byte); extern void uart_send_str(unsigned char *str); extern void uart(); #endif
    转载请注明原文地址: https://ju.6miu.com/read-1125645.html

    最新回复(0)