为什么程序功能不实现呢,是代码的问题还是电路图连错了呢
(问题1:1602不显示 问题2:蜂鸣器持续发出响声)
/*设计一个单片机监控的电话拨号键盘,
将电话键盘中拨出的某一电话号码,显示在LCD显示屏上。
电话键盘共有12个键,“0”~ “9”10个数字键,
“*”键用于实现退格功能,即清除输入的号码;
“#”键用于清除显示屏上所有的数字显示。
还要求每按下一个键要发出声响,以表示按下该键。*/
#include <reg51.h>
#include <string.h>
/*---------特殊位变量定义--------------*/
sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2;
sbit key4=P1^3; sbit key5=P1^4; sbit key6=P1^5;
sbit key7=P1^6; sbit key8=P1^7; sbit key9=P2^7;
sbit key10=P2^5; sbit key0=P2^6; sbit key11=P2^4;
//key[]={1,2,3};
//unsigned char keyValue=0;
sbit E=P2^2;//1602使能位
sbit RW=P2^1;//1602读写位
sbit RS=P2^0;//1602数据/命令位
sbit beep=P3^4;//蜂鸣器
unsigned char message[5]="";//输出使用的专业字符数组
//unsigned char str[12]={1,2,3};
/*------------消抖延时函数------------*/
void delay(unsigned char t)
{
unsigned char i;
for (i = 0; i < t; i++)
for (i = 0; i < 125; i++);
}
//void delay(unsigned char t)
//{
// while(t--);
//}
/*----------------1602-----------------*/
void writecom(unsigned char com)//1602写入命令函数
{
RS=0;
RW=0;
P1=com;
delay(100);
E=1;
delay(100);
E=0;
}
void writedat(unsigned char dat)//1602写入数据函数
{
RW=0;
RS=1;
P1=dat;
delay(100);
E=1;
delay(100);
E=0;
}
void init()//1602初始化函数
{
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x01);
}
void display(unsigned char h,unsigned char l,unsigned char *str)//1602中指定行列位置输出字符串函数
{
unsigned char i;
switch (h)
{
case 1:writecom(0x80+l);
for(i=0;i<strlen(str);i++)
writedat(str[i]);
break;
case 2:writecom(0xc0+l);
for(i=0;i<strlen(str);i++)
writedat(str[i]);
break;
}
}
void change(unsigned char temp)//把数值转变为字符串函数
{
message[0]=temp/10+48;
message[1]=temp%10+48;
message[2]='\0';
}
/*----------------独立按钮---------------*/
unsigned char keyscan(){
unsigned char key_value = 0;
if (key1 == 0) { // 发现按键1被按下
delay(50); // 消抖
if (key1 == 0) { // 确定按键状态稳定后返回键值
key_value = 1;
}
}
if (key2 == 0) { // 发现按键2被按下
delay(50); // 消抖
if (key2 == 0) { // 确定按键状态稳定后返回键值
key_value = 2;
}
}
return key_value;
}
/* ------------声音播放函数 ------------*/
void play_sound() {
beep = 0; // 打开蜂鸣器
beep=~beep;
delay(50); // 播放声音持续一段时间
}
void main(){
init();
while(1)
{
// 电话键盘上的数字对应的ASCII码数组
unsigned char num[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, '*', '#', 0};
unsigned char key_value = 0;
key_value=keyscan();
// 将键值转换为对应的数字并存储在message数组中
change(key_value);
// message[0] = num[key_value];
// 添加字符串结束符
// message[1] = '\0';
// 在第一行第一列显示message数组中的字符串
display(1, 1, message);
// change(key_value);
play_sound();
}
}