这篇文章是自己写的单片机课设,发这篇文章就当留个小纪念;如果说有什么不太好的地方还请大神请指出
Keil C51的代码以及Proteus的仿真的百度网盘链接放在文章最后,需要的人可以自取
提示:以下是本篇文章正文内容,下面案例可供参考
文章后面有关于代码常见问题的解释,又不懂可以看一下。
对于LCD1602来说,将它的代码和主函数放到同一个.c文件中会显得十分的累赘;对于这个波形发生器来说LCD显示只是辅助功能,所以放到一个独立的头文件中是一个不错的选择.
/*LCD1602.h 是LCD1602头文件*/
#ifndef _LCD1602_H_
#define _LCD1602_H_
#include
#define uint unsigned int
#define uchar unsigned char
/*LCD1602位定义*/
sbit lcdrs = P2^7;//RS : 0=输入指令;1=输入数据
sbit lcden = P2^6;
/*LCD1602函数声明*/
void lcd_ram(); //向LCDRAM中写入八个字节的点阵数据,就会组成一个字符
void init_lcd(); //初始化函数
void write_com(uchar com); //写命令函数
void write_date(uchar date); //写数据函数
void delay_LCD56(uint xms);
/*LCD1602要显示的字符*/
uchar code table[]; //1-9
uchar code table1[];//前面是Fout= 是0-9
uchar code zifu[];
#endif
相关的LCD1602.c文件在链接里面有,这里就不再展示
对于波形输出采用定时器中断的方式输出,通过设置定时/计数器的初值就能够控制波形的频率,对于以后功能的扩展是个不错的选择;
void T0_time() interrupt 1
{
TH0=a;//重新装填初值
TL0=b;
u++; //u自加1
if(u>=64) //如果u超过64,就要归零
u=0; //这是因为各个波形的取值只有64个
/*开始输出第一个波形*/
WR1 = 1;
CS0 = 0; /*CS0低电平有效,选中第一个DAC0832*/
CS1 = 1; /*CS1低电平有效,第二个DAC0832未被选中*/
P0 = wave[flag_0][u];/*将数据通过P0口输出到数模转换电路中*/
WR1 = 0;
delay(20);
/*第一个波形输出完成*/
/*8*8矩阵显示第一个波形*/
for(temp = 0;temp<4;temp++)
{
line_scan();
send_595(matrix[flag_0][temp]);
delay(3);
ST_CP_0 = 0;
ST_CP_0 = 1; //上升沿,存储寄存器变为高电平
_nop_();
ST_CP_0 = 0; //发送完
}
/*8*8矩阵显示第一个波形完成*/
/*开始输出第二个波形*/
WR1 = 1;
CS0 = 1;
CS1 = 0;
P0 = wave[flag_1][u];
WR1 = 0;
delay(20);
/*第二个波形输出完成*/
/*8*8矩阵显示第2个波形*/
for(temp = 0;temp<4;temp++)
{
line_scan();
send_595(matrix[flag_1][temp]);
delay(3);
ST_CP_0 = 0;
ST_CP_0 = 1; //上升沿,存储寄存器变为高电平
_nop_();
ST_CP_0 = 0; //发送完
}
/*8*8矩阵显示第2个波形完成*/
}
波形选择用的是外部中断0,节省资源;设置优先级高于定时器中断0,能够打断中断0的服务程序进行设置.
void keyscan()
{
//当第一个键按下去
if(s1 == 0)
{
delay(1);
if(s1 == 0)
{
EA = 0; //关闭总中断
while(!s1); //等待松开按键
if(++flag_0==4)
flag_0=0;
display(); //展示函数
EA = 1; //开总中断
}
}
//当第二个按键按下去
if(s2==0)
{
delay(1); //防抖动
if(s2==0) //确认按键按下
{
EA=0; //关闭总中断
while(!s2); //等待按键松开
if(++flag_1==4)
flag_1=0;
EA=1;
}
}
}
void interrupt_0() interrupt 0 using 3
{
while (s3!=0)
//等待S3按键按下,就跳出循环,结束中断服务程序
{
keyscan();
}
}
这篇文章是自己写的单片机课设,发这篇文章就当留个小纪念;如果说有什么不太好的地方还请大神请指出。
链 接: 点击跳转:基于51单片机的波形发生器(公开资源)(同时输出两种波形)
若有错误,欢迎私信指出