📄 1415.c
字号:
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit MUTE = P2^4;
sbit DI = P2^5;
sbit CLK = P2^6;
sbit CE = P2^7;
sbit KEY_1= P1^4;
sbit KEY_2= P1^5;
sbit KEY_3= P1^6;
sbit KEY_4= P1^7;
sbit rs = P2^0;
sbit rw = P2^1;
sbit ep = P2^2;
sbit lg = P2^3;
void Send_16(uint ui_Date, uchar uc_MONO ,uchar uc_PD); //发送数据函数
void Key_Scan_1(void); //控制静音
void Key_Scan_2(void); //频率步进 精度0.1MHZ
void Key_Scan_3(void); //频率步退 精度0.1MHZ
void Key_Scan_4(void); //立体声控制
void Delay(uchar ms);
void Disp(void);
void lcd_wdat(uchar dat);
void lcd_wcmd(uchar cmd);
void lcd_pos(uchar pos);
void lcd_init(void);
void lcd_disp(uchar pos,uchar dat);
bit lcd_bz(void);
uchar uc_Count_1;
uchar uc_Count_2;
uchar uc_Count_3;
uchar uc_Count_4;
uint ui_TEMP_1; //保存频率数据
uint ui_TEMP_2; //保存立体声数据
uint ui_TEMP_3; //保存静音数据
uint ui_TEMP_4; //
/**********************************主程序*************************************/
void main(void)
{
Send_16(0x3e7,0x01,0x00);
ui_TEMP_2=0x01;
MUTE=0;
Disp();
while(1)
{
Key_Scan_1();
Key_Scan_2();
Key_Scan_3();
Key_Scan_4();
// Disp();
}
}
/**********************************主程序*************************************/
/**********************************显示子程序*************************************/
void Disp(void)
{
lcd_init(); // 初始化LCD
Delay(10);
lcd_disp(0,70);
lcd_disp(1,77);
lcd_disp(2,58);
if(ui_TEMP_1>=1000)
{
lcd_disp(3,ui_TEMP_1/1000%10+48);
}
lcd_disp(4,ui_TEMP_1/100%10+48);
lcd_disp(5,ui_TEMP_1/10%10+48);
lcd_disp(6,46);
lcd_disp(7,ui_TEMP_1%10+48);
if(ui_TEMP_2)
{
lcd_disp(9,83);
lcd_disp(10,84);
lcd_disp(11,69);
}
if(ui_TEMP_3)
{
lcd_disp(13,77);
lcd_disp(14,85);
}
lcd_disp(15,127);
lcd_disp(64,126);
lcd_disp(66,57);
lcd_disp(67,57);
lcd_disp(69,77);
lcd_disp(70,85);
lcd_disp(71,83);
lcd_disp(72,73);
lcd_disp(73,67);
lcd_disp(76,79);
lcd_disp(77,78);
lcd_disp(79,127);
}
/**********************************显示子程序*************************************/
/**********************************延时子程序********************************/
void Delay(uchar ms)
{ // lcd延时子程序
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/**********************************延时子程序********************************/
/**********************************LCD函数*********************************/
void lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38); //
Delay(1);
lcd_wcmd(0x38); //
Delay(1);
lcd_wcmd(0x38); //
Delay(1);
lcd_wcmd(0x0c); //
Delay(1);
lcd_wcmd(0x06); //
Delay(1);
lcd_wcmd(0x01); //清除LCD的显示内容
Delay(1);
}
bit lcd_bz()
{ // 测试LCD忙碌状态
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(uchar cmd) // 写入指令数据到LCD
{
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_disp(uchar pos,uchar dat)
{
lcd_wcmd(pos | 0x80); //设定显示位置
while(lcd_bz()); //写入字符显示数据到LCD
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
/**********************************LCD函数*********************************/
/**********************************键盘扫描1*********************************/
void Key_Scan_1(void) //控制静音
{
if(KEY_1==0)
{
{
Delay(20);
if(KEY_1==0)
{
MUTE=(uc_Count_1++)%2;
ui_TEMP_3=MUTE;
while(KEY_1==0);
}
Disp();
while(KEY_1==0);
}
}
}
/**********************************键盘扫描1*************************************/
/**********************************键盘扫描2*************************************/
void Key_Scan_2(void) //频率步进
{
if(KEY_2==0)
{
Delay(20);
if(KEY_2==0)
{
uc_Count_2++;
if(uc_Count_2==200)
{
uc_Count_2=0;
Send_16(0x3e7,ui_TEMP_2,0x00);
}
Send_16(ui_TEMP_1+1,ui_TEMP_2,0x00);
Disp();
while(KEY_2==0);
}
}
}
/**********************************键盘扫描2*************************************/
/**********************************键盘扫描3*************************************/
void Key_Scan_3(void) //频率步退
{
if(KEY_3==0)
{
Delay(20);
if(KEY_3==0)
{
uc_Count_3++;
if(uc_Count_3==300)
{
uc_Count_3=0;
Send_16(0x3e7,ui_TEMP_2,0x00);
}
Send_16(ui_TEMP_1-1,ui_TEMP_2,0x00);
Disp();
while(KEY_3==0);
}
}
}
/**********************************键盘扫描3*************************************/
/**********************************键盘扫描4*************************************/
void Key_Scan_4(void) //立体声控制
{
if(KEY_4==0)
{
Delay(20);
if(KEY_4==0)
{
uc_Count_4++;
if(ui_TEMP_2=uc_Count_4%2)
Send_16(ui_TEMP_1,0x01,0x00);
else
Send_16(ui_TEMP_1,0x00,0x00);
Disp();
while(KEY_4==0);
}
}
}
/**********************************键盘扫描4*************************************/
/**********************************数据发送*************************************/
void Send_16(uint ui_Date,uchar uc_MONO ,uchar uc_PD)
{
uchar i;
ui_TEMP_1=ui_Date;
CLK=0;
CE=0;
CE=1;
for(i=11;i;--i)
{
DI=ui_Date&0x01;
ui_Date>>=1;
CLK=1;
CLK=0;
}
DI=uc_MONO&0x01;
CLK=1;
CLK=0;
DI=uc_PD&0x20;
CLK=1;
CLK=0;
uc_PD<<=1;
DI=uc_PD&0x20;
CLK=1;
CLK=0;
DI=1;
CLK=1;
CLK=0;
DI=0;
CLK=1;
CLK=0;
CE=0;
}
/**********************************数据发送*************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -