📄 jifeng_jieshou.c
字号:
Hign_LCD_RS; //RS=1 时为写数据
LCD_Delay(1);
for(i=0;i<8;i++)
{
Low_LCD_SCL;
if(temp&0x80)
{
Hign_LCD_SI;
}
else
{
Low_LCD_SI;
}
LCD_Delay(1);
temp=temp<<1;
Hign_LCD_SCL;
LCD_Delay(1);
Low_LCD_SCL;
}
Low_LCD_RS;
Hign_LCD_CS; //先cs置0,然后把数据都送到口上准备好(产生上升沿),最后才置片选cs为1
}
//---------------------------------LCD写命令函数--------------------------------
void Lcd_Write_command(uchar COMMAND)
{
uchar i,temp;
temp = COMMAND;
Hign_LCD_RS;
Hign_LCD_CS;
Hign_LCD_SCL;
LCD_Delay(1);
Low_LCD_RS; //RS=0 为写命令
Low_LCD_CS;
Low_LCD_SCL;
LCD_Delay(1);
for(i=0;i<8;i++)
{
Low_LCD_SCL;
if(temp&0x80)
{
Hign_LCD_SI;
}
else
{
Low_LCD_SI;
}
temp=temp<<1;
LCD_Delay(1);
Hign_LCD_SCL;
LCD_Delay(1);
Low_LCD_SCL;
}
Hign_LCD_RS;
Hign_LCD_CS; //用了temp后,原来的command的就不会变了
}
//-------------------------------LCD光标函数------------------------------------
void Lcd_CURSOR(uchar add_page,uchar add_col) //光标定位 //8页(<0fh), 且128列(>0fh)
{ //每页8行
Lcd_Write_command(0xB0+(add_page&0x0f)); //+号为合成为一个字节(其实就是或)B0+0x
Lcd_Write_command(0x10|(add_col>>4)); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
Lcd_Write_command(add_col&0x0f); //Set column address LSB(00+xx)即Y3 Y2 Y1 Y0
}
//-------------------------------LCD清屏函数------------------------------------
void Lcd_Clear(void) //128x64字节,实际中一般要多
{
uchar i,j;
for(i=0;i<9;i++) //>8页
{
Lcd_CURSOR(i,0);
for(j=0;j<132;j++) //>128列
{
Lcd_CURSOR(i,j); //列在变,光标也在不停的换列
Lcd_Write_Data(0); //定好一页后,再一列一列的写00h,列在变
}
}
}
//--------------------------------LCD测试---------------------------------------
void Test_LCD(void)
{
uchar i,j;
for(i=0xB0;i<0xB8;i++) //B0-B8共8页
{
Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
Lcd_Write_command(0x01);
Lcd_CURSOR(i,0);
for(j=0;j<132;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(i,j); //列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(0x01); //检测写进f0h???4点亮4点暗
}
}
}
/*
//------------------------------------------------------------------------------
void dis_biankuang() //边框设计
{
uchar i,j,k;
for(i=0xB0;i<0xB8;i++) //2页16行
{
Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
Lcd_Write_command(0x01);
Lcd_CURSOR(i,0);
for(j=0;j<132;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(i,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(0x03); //检测写进f0h???4点亮4点暗
}
for(k=0xB0;k<0xB7;k++)
{
for(j=2;j<6;j++)
{
Lcd_CURSOR(k,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(0xff);
}
for(j=130;j<132;j++)
{
Lcd_CURSOR(k,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(0xff);
}
}
i=i+7;
for(j=0;j<132;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(i,j); //列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(0x03); //检测写进f0h???4点亮4点暗
}
}
}
*/
//------------------------------16*16汉字显示-----------------------------------
void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[]) //16*16
{
uchar i,j;
for(i=x1;i<x2;i++) //2页16行
{
Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
Lcd_Write_command(0x01);
Lcd_CURSOR(i,0);
for(j=0;j<16;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(i,j+row); //改变列位置,列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(hz[j]); //检测写进f0h???4点亮4点暗
}
i++;
for(j=0;j<16;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(i,j+row); //列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(hz[j+16]); //检测写进f0h???4点亮4点暗
}
}
}
/*------------------------------------------------------------------------------
void Dis16x16(uchar add_page, uchar add_col,const uchar *pHZ,uchar state)
{
uchar i;
Lcd_CURSOR(add_page, add_col);
for(i=0;i<16;i++)
{ //一个汉字2行,16列,32个字节
if(state) //state(选亮,黑)
{
Lcd_Write_Data(pHZ[i]); //光标定位后沿着行开始写16列的字模数据??????
}
// else
// {
Lcd_Write_Data(~pHZ[i]); //如果列变,光标也会不停的换列,这里光标只换页不换列
// } //那还是一列一列的写吗????(写一次会自动加1列)
// } //而清时在不停的换列
Lcd_CURSOR(add_page-1, add_col); //加或减都行,只是取模方向不同
for(;i<32;i++)
{
if(state)
{
Lcd_Write_Data(pHZ[i]);
}
// else
// {
// Lcd_Write_Data(~pHZ[i]);
}
}
}
*/
//-----------------------------16*8点阵显示-------------------------------------
void dis_168hz(uchar x1,uchar row,const uchar hz[]) //16*16
{
uchar a,b,j;
a=x1;
b=x1+1;
Lcd_Write_command(a); //+号为合成为一个字节(其实就是或)B0+0x
Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
Lcd_Write_command(0x01);
Lcd_CURSOR(a,0);
for(j=0;j<8;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(a,j+row); //改变列位置,列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(hz[j]); //检测写进f0h???4点亮4点暗
}
Lcd_Write_command(b); //+号为合成为一个字节(其实就是或)B0+0x
Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
Lcd_Write_command(0x01);
Lcd_CURSOR(b,0);
for(j=0;j<8;j++)
{ //每读写一次,列会自动加1
Lcd_CURSOR(b,j+row); //列在变,光标也在不停的换列,重新进行定位
Lcd_Write_Data(hz[j+8]); //检测写进f0h???4点亮4点暗
}
}
void dis_shuzi(uchar x,uchar y,uchar shuzi)
{
switch (shuzi)
{
//case 0x0f:dispaly[2]=9;break;
//case 0x0e:dispaly[2]=9;break;
//case 0x0d:dispaly[2]=8;break;
//case 0x0c:dispaly[2]=8;break;
//case 0x0b:dispaly[2]=7;break;
//case 0x0a:dispaly[2]=6;break;
case 0x09:dis_168hz(x,y,jiu16);break;
case 0x08:dis_168hz(x,y,ba16);break;
case 0x07:dis_168hz(x,y,qi16);break;
case 0x06:dis_168hz(x,y,liu16);break;
case 0x05:dis_168hz(x,y,wu16);break;
case 0x04:dis_168hz(x,y,si16);break;
case 0x03:dis_168hz(x,y,san16);break;
case 0x02:dis_168hz(x,y,er16);break;
case 0x01:dis_168hz(x,y,yi16);break;
case 0x00:dis_168hz(x,y,ling16);break;
default:break;
}
}
//-----------------------------------------------------------------------------
/*void LCDtime(uchar x,uchar nian1,uchar nian2,uchar nian3,uchar nian4,
uchar yue1,uchar yue2,
uchar ri1,uchar ri2,
uchar shi1,uchar shi2,
uchar fen1,uchar fen1,) //LCD时间显示函数
*/
//------------------------------------------------------------------------------
/*
void LCDtime()
{
dis_168hz(0xB6,5,er16); //n1
dis_168hz(0xB6,13,ling16); //n2
dis_168hz(0xB6,21,ling16); //n3
dis_168hz(0xB6,29,qi16); //n4
dis_168hz(0xB6,37,heng16);
dis_168hz(0xB6,45,yi16); //y1
dis_168hz(0xB6,53,ling16); //y2
dis_168hz(0xB6,61,heng16);
dis_168hz(0xB6,69,yi16); //r1
dis_168hz(0xB6,77,ling16); //r2
///////////////////////////////////////////////
dis_168hz(0xB6,90,yi16); //s1
dis_168hz(0xB6,98,san16); //s2
dis_168hz(0xB6,106,maohao16); //
dis_168hz(0xB6,114,yi16); //f3
dis_168hz(0xB6,122,liu16); //f4
}
*/
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void dis_ykxt()
{
//---------------------------第一行“无线遥控系统“-----------------------------
dis_1616hz(0xB0,0xB1,20,wu);
dis_1616hz(0xB0,0xB1,36,xian);
dis_1616hz(0xB0,0xB1,52,yao);
dis_1616hz(0xB0,0xB1,68,kong);
dis_1616hz(0xB0,0xB1,84,xi);
dis_1616hz(0xB0,0xB1,100,tong);
}
//----------------------------第2行“继电器开”-------------------------------------
void dis_jdql()
{
dis_1616hz(0xB3,0xB4,35,ji);
dis_1616hz(0xB3,0xB4,51,dian);
dis_1616hz(0xB3,0xB4,67,qi);
dis_1616hz(0xB3,0xB4,83,kai);
}
//---------------------------第3行“蜂明器响“--------------------------------------
void dis_fmqx()
{
dis_1616hz(0xB3,0xB4,35,feng);
dis_1616hz(0xB3,0xB4,51,ming);
dis_1616hz(0xB3,0xB4,67,qi);
dis_1616hz(0xB3,0xB4,83,xiang);
}
//-------------------------------串口初始化-------------------------------------
void StartUART(void)
{
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRL=0x33;
UBRRH=0x00;
UCSRA=UCSRA|0x08;
}
//------------------------------串口发送----------------------------------------
void R_S_Byte(uchar R_Byte)
{
UDR= R_Byte;
}
//------------------------------主函数------------------------------------------
void main(void)
{
uint i;
DDRD=0xF2; //端口D设置
DDRB=0xB3; //端口B设置
//------------------------------------------------------------------------------
Spi_initial(); //SPI初始化
system_Init(); //系统状态初始化
Config905(); //NRF905初始化
//------------------------------------------------------------------------------
Lcd_init(); //LCD初始化
//------------------------------------------------------------------------------
StartUART(); //串口初始化9600波特率
Delay(500);
Lcd_Clear(); //清屏幕
//------------------------------------------------------------------------------
while(1)
{
RX(); //接收数据
if(TxRxBuffer[0])
{
if(TxRxBuffer[0]==0x29)
{
Low_JDQ; //打开继电器
dis_ykxt();
dis_jdql();
}
if(TxRxBuffer[0]==0x30)
{
Low_BELL; //打开蜂明器
dis_ykxt();
dis_fmqx();
}
if(TxRxBuffer[0]==0x31)
{
Lcd_Clear(); //清屏幕
}
}
Hign_JDQ; //关闭继电器
Hign_BELL; //关闭蜂明器
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -