📄 main.c
字号:
#include "Includes.h"
unsigned char datTem[2]={0,0}; //温度值储存 datTem[1]高8位 datTem[0]低8位
unsigned char key=0; //键盘扫描键值
unsigned char uart_receive_date=0; //串口接收数据
bit flag=0;
unsigned char code uart_transmit[]={"uart transmit"};
unsigned char code spi_transmit[]={"SPI transmit"};
void send_char_uart( unsigned char date); //串口发送
void com_init(); //串口初始化
/*********************LCD初始化后显示"hello"****************************************/
void hello(void)
{
unsigned char X[14]={"Hello everyone"},a=0x80,i;
WriteCommandLCM(0x01,1);
for(i=0;i<14;i++,a++){
display_lcm(X[i],a);
Delay_Xms(5); Delay_Xms(5);
}
for(i=0;i<200;i++){
Delay_Xms(5); Delay_Xms(5);
}
WriteCommandLCM(0x01,1);
}
/***************显示温度************/
void temp_view(unsigned char *ddate)
{
unsigned int temp1=0,temp0=0,a,b,c,g,h,i,j,z;
if((ddate[0]==0xFF)&&(ddate[1]==0xFF)){ ddate[0]=0;ddate[1]=0;}
z=ddate[1]&0xF0;
if(z>0) //正负温度符号判断显示
display_lcm('-',0xc0);
else
display_lcm('+',0xc0);
if(z==0){ //正温度处理
temp1= ((ddate[1]&0x0F)<<4)+((ddate[0]&0xF0)>>4);
temp0=(ddate[0]&0x0F)*625;
}
else { //负温度处理
temp1= (((~ddate[1])&0x0F)<<4)+(((~ddate[0]+8)&0xF0)>>4);
temp0=((~ddate[0]+1)&0x0F)*625;
}
a=(temp1%1000)/100;
display_lcm(a+'0',0xc1);
b=(temp1%100)/10;
display_lcm(b+'0',0xc2);
c=(temp1%10)/1;
display_lcm(c+'0',0xc3);
display_lcm('.',0xc4); // 显示小数点
g=(temp0%10000)/1000;
display_lcm(g+'0',0xc5);
h=(temp0%1000)/100;
display_lcm(h+'0',0xc6);
i=(temp0%100)/10;
display_lcm(i+'0',0xc7);
j=(temp0%10)/1;
display_lcm(j+'0',0xc8);
}
/***************主函数***********************************/
void main()
{
unsigned char baiwei=0,gewei=0,shiwei=0;
unsigned int shifen=0,baifen=0,qianfen=0,wanfen=0;
LCMInit();
com_init();
hello();
do{
temp_view(datTem);
key=keyscan();
if(uart_receive_date!=0) display_lcm(uart_receive_date,0x8f);
baiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%1000/100)+48;
shiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%100/10)+48;
gewei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%10/1)+48;
shifen=(((datTem[0]&0x0F)*625)%10000/1000)+48;
baifen=(((datTem[0]&0x0F)*625)%1000/100)+48;
qianfen=(((datTem[0]&0x0F)*625)%100/10)+48;
wanfen=(((datTem[0]&0x0F)*625)%10/1)+48;
switch(key-'A')
{
case 0: {key=0;SPI_Transmit('A');} break;
case 1: {key=0;SPI_Transmit('B');} break;
case 2: {key=0;SPI_Transmit('C');} break;
case 3: {key=0;SPI_Transmit('D');} break;
case 4: {key=0;SPI_Transmit('E');} break;
case 5: {key=0;SPI_Transmit('F');} break;
case 6: { key=0; //G串口通信
diaplay_string(uart_transmit,13);
send_char_uart(baiwei);
send_char_uart(shiwei);
send_char_uart(gewei);
send_char_uart('.');
send_char_uart(shifen);
send_char_uart(baifen);
send_char_uart(qianfen);
send_char_uart(wanfen);
send_char_uart(' ');
WriteCommandLCM(0x01,1);
} break;
case 7: {key=0;SPI_Transmit('G');} break;
default : {} break;
if(uart_receive_date!=0) display_lcm(uart_receive_date,0x8f);
uart_receive_date=0;
}
}while(1);
}
/************************************************
UART 串口通信程序
*************************************************/
/*************串口初始化*********************/
void com_init()
{
TMOD=0x20; //定时器1方式2
TH1=0xfd; //波特率9600
TL1=0xfd;
SCON=0x50; //串口工作方式1,允许接收
PCON= 0x00; // 波特率不倍增
TR1=1; //启动定时
IE=0x91; //开串口中断 等效于 EA=1;ES=1;EX0=1
}
/*************向串口发送一个字符*********************/
void send_char_uart( unsigned char date)
{
EA=0;
SBUF=date;
while(TI==0);
TI= 0 ;
EA=1;
}
/*************串口中断函数*********************/
void Uart_receive(void) interrupt 4 //串口中断接收
{
EA=0;
if(RI)
{
uart_receive_date=SBUF;
key=uart_receive_date;
RI=0;
}
else TI=0; //发送中断。则无操作
EA=1;
}
/*************INT0中断函数*********************/
void SPI_INT0(void) interrupt 0
{
EA=0;
while(MOSI==0){
if(flag==0){ datTem[1]=SPI_Receive(); flag=~flag;}
else {datTem[0]=SPI_Receive(); flag=~flag;}
}
EA=1;
}
/************************************************
THE END OF FILE
*************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -