uchar code sawtooth_tab[]={
0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,
0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,
0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e};
//0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,
//0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee};
void delay(uchar z)
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
void triangle_out()//三角波输出
{
DAdata=https://www.04ip.com/post/triangle_tab[wavecount++];
if(wavecount64) wavecount=0;
DA_S1=0;//打开8位输入寄存器
DA_S1=1;//关闭8位输入寄存器
}
void sine_out() //正弦波输出
{
DAdata=https://www.04ip.com/post/sine_tab[wavecount++];
DA_S1=0;//打开8位输入寄存器
DA_S1=1;//关闭8位输入寄存器
}
void square_out()//方波输出
{
judge=~judge;
if(judge==1) DAdata=https://www.04ip.com/post/0xff;
elseDAdata=https://www.04ip.com/post/0x00;
DA_S1=0;//打开8位输入寄存器
DA_S1=1;//关闭8位输入寄存器
}
void sawtooth_out() //锯齿波输出
{
DAdata=https://www.04ip.com/post/sawtooth_tab[wavecount++];
if(wavecount71) wavecount=0;
DA_S1=0;//打开8位输入寄存器
DA_S1=1;//关闭8位输入寄存器
}
/************1602液晶的相关函数*************/
#define lcd_ports P1
sbit rs=P2^2;
sbit rw=P2^3;
sbit lcden=P2^4;
void write_com(uchar com)
{
rs=0;//置零,表示写指令
lcden=0;
lcd_ports=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
rs=1;//置1,表示写数据(在指令所指的地方写数据)
lcden=0;
lcd_ports=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void disp_lcd(uchar addr,uchar *temp1)
{
uchar num;
write_com(addr);
delay(1);//延时一会儿???
for(num=0;num16;num++)
{
write_date(temp1[num]);//或者这样写write_date(*(temp1+num));
delay(1);
}
}
void init_lcd()
{
//uchar num;
lcden=0;//可有可无???
rw=0;//初始化一定要设置为零 , 表示写数据
write_com(0x38);//使液晶显示点阵,为下面做准备
write_com(0x0c);//初始设置
write_com(0x06);//初始设置
write_com(0x01);//清零
write_com(0x80);//使指针指向第一行第一格
disp_lcd(0x80,lcd_hang1[4*16]);//在第一行显示
disp_lcd(0xc0,lcd_hang1[5*16]);//在第二行显示
/*for(num=0;num16;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);//给指针重新赋值,使之指向第二行第一格
for(num=0;num16;num++)
{
write_date(table1[num]);
delay(5);
} */
/*TMOD=0x01;//选用定时方式1
TH0=(65536-50000)/256;//赋初值
TL0=(65536-50000)%256;//
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//启动定时器*/
}
/********************1602液晶函数声明结束*********************/
void main()
{
uchar i=0;
DA_S2=0;//使DAC寄存器处于直通状态
DAdata=https://www.04ip.com/post/0;
DA_S1=1;//关闭8位输入寄存器
init_lcd();
waveform=0;
TMOD=0x01;//设置定时器0为16位工作方式
IT0=1;//设置外部中断0为下降沿触发
ET0=1;//开定时器中断
EX0=1;
推荐阅读
- 虚拟机root真机能用吗,虚拟机root有什么用
- jquery选择所有li标签,jquery类选择器后遍历
- 免费冒险解谜游戏,冒险解谜游戏网站
- 如何把hbase数据写入hive,hbase写入流程详细解释
- 在html中引入js的三种方法,html引进js
- CHATGPT存储的信息来源,存储信息方式
- redis主从处理请求原理,redis5主从配置
- linux命令输入格式化 linux 格式化
- pg数据库备份表create,pgadmin4备份数据库