立即注册 登录
返回首页

uid:80436的个人空间

留言板

莫名琪妙0708 2018-5-16 18:55
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


/*------------------------------------------------
                  全局变量
------------------------------------------------*/

unsigned char High,Low; //定时器预装值的高8位和低8位

sbit SPK=P2^3;          //定义喇叭接口

unsigned char code freq[][2]={
  0xd8,0xf7,//00440HZ 1   
  0xbd,0xf8,//00494HZ 2  
  0x87,0xf9,//00554HZ 3  
  0xe4,0xf9,//00587HZ 4   
  0x90,0xfA,//00659HZ 5     
  0x29,0xfB,//00740HZ 6     
  0xb1,0xfB,//00831HZ 7      
  0xef,0xfB,//00880HZ `1
};
/*------------------------------------------------
                  函数声明
------------------------------------------------*/
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++);

}
void Init_Timer0(void);//定时器初始化
/*------------------------------------------------
                    主函数
------------------------------------------------*/
unsigned char keyscan(void)//键盘扫描函数,使用行列反转扫描法 比如:行为低电位,列为高四位
{
void delay(unsigned int i);
unsigned char cord_h,cord_l;//行列值
P3=0x0f;            //行线输出全为0
cord_h=P3&0x0f;     //读入列线值
if(cord_h!=0x0f)    //先检测有无按键按下
{
delay(10);        //去抖
if(cord_h!=0x0f)
{
    cord_h=P3&0x0f; //读入列线值
    P3=cord_h|0xf0; //输出当前列线值
    cord_l=P3&0xf0; //读入行线值
    return(cord_h+cord_l);//键盘最后组合码值
   }
} return(0xff);     //返回该值
}
void main (void)
{
unsigned char num;
unsigned char key;

key=keyscan();
Init_Timer0();    //初始化定时器0,主要用于数码管动态扫描
SPK=1;            //在未按键时,喇叭低电平,防止长期高电平损坏喇叭
while (1)         //主循环
{

   switch(key)
                {
                 case 0x7e:num= 1;break;
                 case 0x7d:num= 2;break;
                 case 0x7b:num= 3;break;
                 case 0x77:num= 4;break;
                 case 0xbe:num= 5;break;
                 case 0xbd:num= 6;break;
                 case 0xbb:num= 7;break;
                 case 0xb7:num= 8;break;
                 default:num= 0;break;
                }

        
   if(num==0)
      {
       TR0=0;
       SPK=1;   //在未按键时,喇叭低电平,防止长期高电平损坏喇叭
           }
   else
      {
            High=freq[num-1][1];
                   Low =freq[num-1][0];
                TR0=1;
          }
  }
}


/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=High;
TL0=Low;

SPK=!SPK;

}
请教一下,我这代码烧录进单片机时为什么不能发音呢
勇士小子 2018-4-28 10:57
大神,求《凉凉   》 的蜂鸣器程序,谢谢
Harrise 2017-12-21 21:05
呼叫前辈
Harrise 2017-12-21 21:03
大神,请求一个歌曲 凉凉 的蜂鸣器程序     
麻烦快点哟
女超人 2017-8-28 16:41
学校有个简单的蜂鸣器项目,你能不能给我点建议,谢谢了,我实在不知道怎么做了
chinaboy2277 2016-9-7 02:49
你好,关于几节计算机原理的教程,大神有推荐的教程吗?
491931636 2016-7-20 22:38
您好 我现在是一名学生  现在打算完全尝试再自己学习你做一个8位CPU用74系列    先真的需要您的些许指导    麻烦您加一下我的QQ491931636 直接添加就可以了;谢谢
火狐free 2016-7-14 17:13
新手求教:
前辈您好,很冒昧给您消息向您求助,希望能请教一点问题,在此现向您表示感谢。对于使用舵机来说,我是一个新手,现在需要调试一个MX-28R舵机,起初使用RoboPlus连接是识别了舵机的。然后我想修改舵机ID号和波特率,我就根据pdf文档在软件界面操作了,但我发现设置了几次,ID号和波特率并没有改变;然后我就脑残了一下,想着先关闭,重新打开软件连接一下,再看ID号显示是否改变,悲剧的是重启软件,竟然无法搜索到Dynamixel了,真不知道怎么办,十分着急。在此冒昧向您咨询一下,还望您能给予些许指点,不胜感激!
我的qq是1543001275,如果您能看到我的留言,还望您能在qq或者站内信息上给予指点,真的十分十分感激。
千万人头 2016-6-24 23:08
3225217553  你好想问下矩形键盘的程序 有些问题可以请教一下吗
772328244@qq.co 2016-5-19 21:31
你好,想问下FFT运算的那个程序,有一些不懂的可以请教下吗
我爱我家 2015-9-29 13:00
之前发帖的altium designer账号不能用啊,你还有可以用的账号吗??求分享啊,万分感谢!!!
shuichesc 2015-9-9 21:33
多功能电源插座控制模块
http://www.51hei.com/bbs/dpj-34487-1.html
成品有吗?急需,请速联系。103617399。shuicheshuiche@163.com.

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部