资源简介
用D/A转换器输出一个正弦波,频率从20Hz~5KHz,采用矩阵式按键,由按键直接四位数指定频率,8052的定时器2定时输出。文件包含电路图和设计程序,及全部仿真文件可直接运行。
代码片段和文件信息
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define DAC0832 XBYTE[0x7fff]
#define KEY_PORT P1
uchar code DSY_CODE[]=
{
0x800xb10xda0xf50xff0xf50xda0xb10x800x4f0x260x0b0x010x0b0x260x4f
};
float tdelay ;//每个点延时的时间
unsigned char keyNum=0xff;
unsigned char SetFreq_flag=0;//设置频率的标志
uint exchangeusuuj;
uint mntcaaa;
uint pinlv=1000;
uint g_Period;
//void DelayMS(uint u)//延时程序单位为10微秒
//{
// uchar i;
// while(u--)
// {
// for(i=0;i<120;i++);
// }
//}
void DelayMs( unsigned int ms)
{
unsigned int ij;
for (i = 0; i < ms; i++)
for(j=0;j<124;j++);
}
// #define cv 1024 // 10000次计数,60MHz时钟时定时2mS
void init_T2() // 定时器2初始化
{ T2CON =0; // 设定T2自动重装模式
T2MOD =0;
RCAP2H =(65536-us)/256;
RCAP2L =(65536-us)%256;
TH2 =(65536-us)/256;
TL2 =(65536-us)%256;
ET2 = 1; // 开T2中断
PT2 = 1; //T2 中断高优先级
TR2 = 1; //启动T2
}
unsigned char keyScan(void)
{
unsigned char key=0xff;
unsigned char temptemp1temp2;
KEY_PORT=0XF0;
if( (KEY_PORT& 0XF0) !=0XF0)
{
EA=0;
DelayMs(10);
if( (KEY_PORT & 0XF0) !=0XF0)
{
temp1= KEY_PORT & 0XF0;
KEY_PORT=0X0f;
DelayMs(10);
temp2= KEY_PORT & 0X0f;
while((KEY_PORT & 0X0f) !=0X0f);//等待按键释放
temp=temp1|temp2;
switch(temp)
{
case 0xee:key=1;break;
case 0xde:key=2;break;
case 0xbe:key=3;break;
case 0x7e:key=4;break;
case 0xed:key=5;break;
case 0xdd:key=6;break;
case 0xbd:key=7;break;
case 0x7d:key=8;break;
case 0xeb:key=9;break;
case 0xdb:key=0;break;
case 0xbb:key=10;break;
case 0x7b:key=11;break;
case 0xe7:key=12;break;
case 0xd7:key=13;break;
case 0xb7:key=14;break;
case 0x77:key=15;break;
default:break;
}
}
EA=1;
}
return key;
}
void main()
{
EA=1;
EC=1;
CR=1;
us=500;
g_Period=floor(1000000/pinlv );
tdelay=g_Period/16; //获得每个点需要延时的时间
us=5*floor(tdelay); //每个点需要延时多少个微秒
init_T2();
while(1) //循环输出正弦
{
keyNum=keyScan(); //按键选择控制函数
if(keyNum!=0xff)
{ EA=0;
if(keyNum==10 && SetFreq_flag==0) //A键 进入设置频率状态
{
SetFreq_flag=1;
pinlv=0;
}
else if(keyNum<10 && SetFreq_flag==1)//数字键 输入频率
{
pinlv=pinlv*10+keyNum;
}
else if(keyNum==10 && SetFreq_flag==1)//A键 HZ确定输出
{
SetFreq_flag=0;
EA=1;
}
EA=1;
us=500;
g_Period=floor(1000000/pinlv );
tdelay=g_Period/16; //获得每个点需要延时的时间
us=5*floor(tdelay); //每个点需要延时多少个微秒
init_T2();
}
for(j=0;j<16;j++)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-05 20:02 单片机作业C51\
文件 1397 2018-10-27 20:20 单片机作业C51\absacc.h
文件 19649 2018-10-27 20:36 单片机作业C51\Last Loaded zyk.pdsbak
文件 1197 2018-10-27 20:21 单片机作业C51\math.h
文件 3088 2018-10-27 20:24 单片机作业C51\reg51f.h
文件 6376 2009-05-07 14:37 单片机作业C51\STARTUP.A51
文件 14054 2018-10-27 20:24 单片机作业C51\STARTUP.LST
文件 749 2018-10-27 20:24 单片机作业C51\STARTUP.OBJ
文件 19684 2018-10-27 20:38 单片机作业C51\zyk.pdsprj
文件 2400 2018-12-23 14:31 单片机作业C51\zyk.pdsprj.LAPTOP-P90I1490.HP.workspace
文件 3522 2018-10-27 20:17 单片机作业C51\zz.c
文件 8389 2018-10-27 20:24 单片机作业C51\zz.LST
文件 10347 2018-10-27 20:24 单片机作业C51\zz.OBJ
文件 11334 2018-10-27 20:24 单片机作业C51\zzz
文件 6475 2018-10-27 20:24 单片机作业C51\zzz.hex
文件 53 2018-10-27 20:24 单片机作业C51\zzz.lnp
文件 13536 2018-10-27 20:24 单片机作业C51\zzz.M51
文件 165 2018-11-14 15:21 单片机作业C51\zzz.plg
文件 71791 2018-12-05 20:02 单片机作业C51\zzz.uvgui.HP
文件 5435 2018-11-14 15:24 单片机作业C51\zzz.uvopt
文件 12200 2018-11-14 15:24 单片机作业C51\zzz.uvproj
文件 58125 2018-10-27 20:39 单片机作业C51\zzz_uvopt.bak
文件 0 2018-10-27 20:14 单片机作业C51\zzz_uvproj.bak
- 上一篇:51单片机计算器
- 下一篇:WiFi介绍及技术原理
相关资源
- 51单片机计算器
- 基于51单片机的水塔控制系统.doc
- C51单片机点阵贪吃蛇代码16*16点阵和
- 单片机51数字稳压电源 今年的毕设
- 矩阵键盘+lcd12864液晶显示
- 51单片机内部AD采样并显示
- 15单片机矩阵键盘,状态机法消抖
- 51单片机原理图
- 基于51单片机的计步手环
- 用51单片机实现计算器功能
- 51单片机的智能抢答器
- c51单片机数码管显示温度
- 51单片机三路循迹程序
- 单片机lcd矩阵键盘计算器
- 蓝牙小车程序 绝对完整 整个工程
- 51单片机实现水温控制系统
- 51单片机 Proteus 心形的滚动显示含代码
- 基于51单片机和LCD1602的计算器
- 基于51单片机/高精度AD(24位)芯片
- 基于51单片机的蓝牙控制继电器程序
- 51单片机篮球计时与计分器
- 基于51单片机的八路抢答器C程序
- 基于步进电机的电梯-51单片机
- 矩阵键盘原理图+PCB
- Confusion matrix_Curve
- 51单片机小车金属丝循迹
- 51单片机——简易计算器设计源码、
- 基于89C51单片机的LCD音乐闹钟(详细注
- 基于STC 51单片机的智能循迹小车
- 51单片机心形流水灯
评论
共有 条评论