找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2092|回复: 2
打印 上一主题 下一主题
收起左侧

关于合并两个程序的问题,使其可以在仿真时一起工作

[复制链接]
跳转到指定楼层
楼主
20黑币
喇叭的代码:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P2^0;        //定义喇叭输出端口
uchar tick,tl,th;                //定义节拍和T0初值变量
uchar TABLE[]={        //音符节拍表
    0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,
        0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
        0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,
        0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
        0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,
        0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
        0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,
        0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
        0x00};
uchar TABLE1[]={  //定时器初值表
0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,0x44,
0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82,
0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,
0xfe,0x85,0xfe,0x9a,0xfe,0xc1};
   //T0中断服务函数
timer0()interrupt 1 using 1{
TL0=tl;TH0=th;
BEEP=~BEEP;
}
//基本单位延时函数
void delay1(){
uint i;
for(i=0;i<20000;i++);
}
//节拍延时函数
void delay(tt){
uchar i;
for(i=0;i<=tt;i++)delay1();
}
//主函数
void main(){
uchar t,t1,k=0;
while(1){
TMOD=0x01;IE=0x82;
while(TABLE[k]!=0){
tick=(TABLE[k])&0x0f;
t=(_crol_(TABLE[k],4))&0x0f;
if(t!=0){
t1=--t*2+1;
t=t*2;
tl=TL0=TABLE1[t1];
th=TH0=TABLE1[t];
TR0=1;
  }
else TR0=0;
delay(tick);
k++;
     }
TR0=0;
   }
}
=================
点阵的代码:
#include<reg52.h>

#include<intrins.h>

//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用
//OE        第13脚        输出有效(低电平)
//MR        第10脚        主复位(低电平)


typedef unsigned char uchar;

typedef unsigned int uint;

/*
   上面引脚控制行,行共阴,即低电平选中
   下面引脚控制列,列共阳,即高电平选中
*/


sbit SER = P3^4;    //p3.4串行数据输入   DS

sbit SCK = P3^6;    //串行输入时钟,上升沿有效    SHCP        第11脚        数据输入时钟线

sbit RCK = P3^5;    //串行寄存器时钟,上升沿有效  STCP        第12脚        输出存储器锁存时钟线


void SendTo595(uchar Data);


char shu=0xFE;

char a[32]={0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,
   0x00,0x66,0x99,0x81,0x42,0x24,0x18,0x00,
   0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7e,
   0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08} ;//列


void delay(unsigned int n)//延时函数

{

unsigned int i=0,j=0;

   for(i=0;i<n;i++)

   for(j=0;j<123;j++);
}

void Hang()//行扫描

{

P1=shu;

shu=_crol_(shu,1);
}
void main(){
   int i=0,changeRow=0;
   RCK=0;
   while(1){
           int speed=12;          //控制速度
           while(speed--){
                   for(i=0;i<8;i++){
                           Hang();
                           SendTo595(a[i+changeRow]);        //串行,控制列.
                           delay(4);
                   }
           }
           changeRow++;        //原来的第二行,变成第一行了.
           if (changeRow>=24)        changeRow=0;        //循环开始.
   }
}

void SendTo595(uchar Data){

  int i;

for(i=0;i<8;i++){

SCK=0;

SER = 0x80&Data;

Data = _crol_(Data,1);

SCK=1;

nop_();//等待一个机器指令时间. }
   /*位移寄存器完毕,转移到存储寄存器*/

RCK = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
  _nop_();
  _nop_();
RCK = 0;        //不加出错,因为电平不变化,存储寄存器的内容不变,为第一次输入的移位寄存器内容0x00.
}
}

本人编程不好,请师傅们帮忙把他们变成一个程序,仿真时一起工作,多谢了 !



20180904165636678.png (110.52 KB, 下载次数: 77)

20180904165636678.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:731982 发表于 2020-4-24 08:54 | 只看该作者
图片少了个喇叭,在P2.0那里
回复

使用道具 举报

板凳
ID:731982 发表于 2020-4-25 10:34 | 只看该作者
有人帮忙看一下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表