#include"C8051F340.h"
#define uchar unsigned char
#define uint unsigned int
//串口 UART0定义
sbit RX0=P0^5;
sbit TX0=P0^4;
//SPI总线定义
sbit SCK=P0^0;
sbit MISO=P0^1;
sbit MOSI=P0^2;
sbit NSS=P0^3;
//复位定义
sbit RREST=P0^6;
sbit ERST=P0^7;
//RS485 定义
sbit 485_TX=P1^0;
sbit 485_RX=P1^1;
sbit 485_RD=P1^2;
//按键 定义
sbit KDOWN=P1^5;
sbit KUP=P1^6;
sbit KSURE=P1^7;
//温湿度 定义
sbit TDAT0=P2^0;
sbit TDAT1=P2^1;
//LED 定义
sbit LED0=P2^4;
sbit LED1=P2^3;
sbit LED2=P2^2;
//直流测量 定义
sbit IIN=P2^5;
sbit VIN=P2^6;
//IIC总线 定义
sbit wp=P2^7;
sbit SCL=P3^0;
sbit SDA=P3^1;
// 时钟 定义
sbit TSCL=P3^2;
sbit TSDA=P3^3;
sbit TRST=P3^4;
//1602LCD 定义
//P4口为LCD的数据口
sbit LCDK=P3^5; // 背光控制信号
sbit LCDRS=P3^6; //数据命令选择控制
sbit LCDEN=P3^7; //使能信号
//全局变量定义
uchar i;
uchar code disp0[16]="";
uchar code disp1[16]="";
/*********************************************************/
// 函数定义
/*********************************************************/
void Port_IO_Init()
{
P0MDOUT = 0x0F;
XBR0 = 0x02;
XBR1 = 0x40;
}
/**************************************/
//LCD模块
/**************************************/
void delay(uchar z)
{
uchar x,y;
for(x=1000;x>1;x--)
for(y=z;y>1;y--);
}
void write_com(uchar com) //写命令函数
{
LCDRS=0;
P4=com;
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
}
void write_date(uchar date) //写数据函数
{
LCDRS=1;
P4=date;
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
}
void init_lcd() //初始化函数
{
LCDEN=0; //默认开始状态为关使能端,见时序图
//lcdrw=0; //选择状态为 写
write_com(0x0f);
write_com(0x38); //显示模式设置,默认为0x38,不用变。
write_com(0x01); //显示清屏,将上次的内容清除,默认为0x01.
write_com(0x0c); //显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪
write_com(0x06); //设置光标状态默认0x06,为读一个字符光标加1.
write_com(0x80); //设置初始化数据指针,是在读指令的操作里进行的
}
void display() //显示函数
{
for(i=0;i<16;i++)
{
write_date(disp0[i]);
delay(5);
}
write_com(0x80+0x40); //更改数据指针,让字符换行
for(i=0;i<16;i++)
{
write_date(disp1[i]);
delay(5); //增加延时可以达到动态的效果
}
}
/**************************************/
//按键模块
/**************************************/
//检测是否有键按下
/*
char scank();
{
char KUNM;
if(0==RREST)
{
delay(10);
if(0==RREST)
{
delay(10090)
if(0==RREST)
{
SWRSF=1;
}
}
}
if(0==KSURE)
{
delay(10);
if(0==KSURE)
//此处添加定时器清零 ,以便背光重新延时1分钟
}
if(0==KDOWN)
{
delay(10);
if(0==KDOWN)
{
//此处添加定时器清零
KNUM=-1;
}
}
if(0==KUP)
{
delay(10);
if(0==KUP)
{
//此处添加定时器清零
KNUM=1;
}
}
return(KNUM);
}
*/
/**************************************/
//电量板模块
/**************************************/
/**************************************/
//直流检测模块
/**************************************/
/**************************************/
//温湿度检测模块
/**************************************/
/**************************************/
//RS232 模块
/**************************************/
/**************************************/
//RS485 模块
/**************************************/
/**************************************/
//USB 模块
/**************************************/
/**************************************/
//DEBUG 模块
/**************************************/
/**************************************/
//时钟 模块
/**************************************/
/**************************************/
//LED和蜂鸣器 模块
/**************************************/
/*********************************************************/
// 函数声明
/*********************************************************/
void delay(uchar z) ;
void write_com(uchar com) ;
void write_date(uchar date);
void init_lcd();
void display();
char scank();
/**************************************/
//主程序
void main(void)
{
// EX0=1;
// ESPI0=1;
init_lcd();
display();
WHILE(1); //初始显示时间、温湿度端口号、温湿度信息
/*
char temp=1;
while(1)
{
display();
temp+=scank();
if (0==temp)
{
temp=7;
}else
if(8==temp)
{
temp=1
}
if(0==KSURE) //确认键按下开始显示更改端口号之后的信息 ,此处不用再检测复位。
{
delay(10);
if(0==KSURE)
//此处添加定时器清零
}
portnum=temp;
IE=FF;
switch(portnum)
{
//此处添加:将相应端口处理后的数据送到data0和data1数组
case 1: //温湿度端口
{break;}
case 2: //电量板端口
{break;}
case 3: //直流测量端口
{break;}
case 4: //IIC
{break;}
case 5: //485端口
{break;}
case 6: //232端口
{break;}
case 7: // USB
{break;}
default;
}
} */
}
LCD.zip_c8051F340 LCD_c8051f340
版权申诉
134 浏览量
2022-09-21
17:25:49
上传
评论
收藏 17KB ZIP 举报
御道御小黑
- 粉丝: 61
- 资源: 1万+