欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
mega128波形發(fā)生器仿真及源程序 LCD顯示
[打印本頁]
作者:
51黑ff
時(shí)間:
2016-9-25 19:24
標(biāo)題:
mega128波形發(fā)生器仿真及源程序 LCD顯示
084540zbo0brsfzr3kgmkr.gif
(1.45 MB, 下載次數(shù): 137)
下載附件
2016-9-25 19:24 上傳
AVR studio編譯環(huán)境。波形發(fā)生器仿真,全部資料下載:
lcd.zip
(72.27 KB, 下載次數(shù): 108)
2016-9-25 19:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
單片機(jī)程序:
//#include
//#include
#include
#include
#include
#include
#define F_CPU 8000000UL // 8MHz clock
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
//#define lcdrs PORTG2
//#define lcdwr PORTG1
//#define lcden PORTG0
uchar const table1[]={" The period is"};
uchar const table2[]={"The frequency is"};
unsigned char const sin_tab[]={
125,128,131,134,138,141,144,147,150,153,156,159,
162,165,168,171,174,177,180,182,185,188,191,193,196,198,201,203,
206,208,211,213,215,217,219,221,223,225,227,229,231,232,234,235,
237,238,239,241,242,243,244,245,246,246,247,248,248,249,249,250,
250,250,250,250,250,250,250,249,249,248,248,247,246,246,245,244,
243,242,241,239,238,237,235,234,232,231,229,227,225,223,221,219,
217,215,213,211,208,206,203,201,198,196,193,191,188,185,182,180,
177,174,171,168,165,162,159,156,153,150,147,144,141,138,134,131,
128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76,73,
70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,30,29,29,28,27,26,25,25,23,21,
19,18,16,15,13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,1,1,2,
2,3,4,4,5,6,7,8,9,11,12,13,15,16,18,19,21,23,25,27,29,31,33,35,37,
39,42,44,47,49,52,54,57,59,62,65,68,70,73,76,79,82,85,88,97,94,97,
100,103,106,109,112,116,119,122
};
float period;
float frequency;
uchar change_flag;
uchar const tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar i=0;
uchar wave_flag=0;
uchar sine_wave;
uchar pluse;
uchar triangle=0,flag;
uchar counter=1;
uchar show_number;
void write_lcdcom(uchar date)//寫lcd1602命令
{
PORTG&=0xFD;
PORTG&=0xFB;
_delay_us(5);
PORTF=date;
PORTG|=0x01;
_delay_us(5);
PORTG&=0xFE;
}
void write_lcddate(uchar lcddate)//寫1602數(shù)據(jù)
{
PORTG&=0xFD;
PORTG|=0x04;
_delay_us(5);
PORTF=lcddate;
PORTG|=0x01;
_delay_us(5);
PORTG&=0xFE;
}
void lcd_init()//1602初始化
{
write_lcdcom(0x38); //display mode
//write_lcdcom(0x38); //display mode
//write_lcdcom(0x38); //display mode
write_lcdcom(0x06); //顯示光標(biāo)移動位置
write_lcdcom(0x0c); //顯示開及光標(biāo)設(shè)置
write_lcdcom(0x01); //顯示清屏
}
void display()//顯示字符子函數(shù)
{
uchar i;
PORTG&=0xFD;
PORTG&=0xFB;
PORTG&=0xFE;
_delay_ms(1);
if(change_flag==0)
{
write_lcdcom(0x80);//第一行l(wèi)cd顯示地址
for(i=0;i<16;i++)
{
write_lcddate(table1[i]);//顯示table1中的字符
}
}
else
{
write_lcdcom(0x80);//第二行LCD顯示起始地址
for(i=0;i<16;i++)
{
write_lcddate(table2[i]);//顯示table2中的字符
}
}
PORTG|=0x02;
PORTG|=0x04;
PORTG|=0x01;
}
void lcd_printf(uint x)//LCD數(shù)據(jù)顯示函數(shù)
{
uchar x1,x2,x3,x4;
x1=x/1000;
x2=x%1000/100;
x3=x%100/10;
x4=x%10;
write_lcdcom(0xc6);
write_lcddate(x1+0x30);//0x30是0的ascii碼
write_lcddate(x2+0x30);
write_lcddate(x3+0x30);//0x30是0的ascii碼
write_lcddate(x4+0x30);
if(change_flag==0)
{
write_lcddate('m');
write_lcddate('s');
}
else
{
write_lcddate('H');
write_lcddate('z');
}
}
void io_init(void)//端口初始化
{
DDRA=0xFF; //端口A輸出
DDRC=0xFF; //端口C輸出
DDRG=0xFF; //端口G輸出
DDRD=0XFF;
DDRB=0XFF;
DDRF=0XFF;
PORTB&=0xFE; //PB0低電平
PORTC=0xFF;
}
void key()//波形發(fā)生按鍵
{
if(PINC==0XFE)// 波形轉(zhuǎn)換
{
wave_flag++;
if(wave_flag>3)
wave_flag=0;
}
while(PINC==0XFE);
if(PINC==0XFD)//周期頻率轉(zhuǎn)換
{
show_number=1;
change_flag++;
if(change_flag>1)
change_flag=0;
}
while(PINC==0XFD);
if(PINC==0XFB)//加
{
counter++;
if(counter>254)
counter=255;
}
while(PINC==0XFB);
if(PINC==0XF7)//減
{
counter--;
if(counter<1)
counter=1;
}
while(PINC==0XF7);
}
void timer0_init(void)//中斷初始化
{
TCNT0=0x7F;//5;
TIMSK|=(1<<toie0); 使能tc0溢出中斷
TCCR0|=(1<<cs01); 8分頻
}
ISR(TIMER0_OVF_vect)
{
TCNT0=0X7F;
// i++;
i=i+counter;
if(i>=255)
i=0;
if(wave_flag==0)//鋸齒波
{
PORTA=i;
period=4000/(counter*5);
frequency=10000/(period);
}
else if(wave_flag==1)//正弦波
{
sine_wave=sin_tab[i];
PORTA=sine_wave;
period=4000/(counter*5);
frequency=10000/(period);
}
else if(wave_flag==2)//方波
{
if(i<127)
PORTA=0xFF;
else
PORTA=0x00;
period=4000/(counter*5);
frequency=10000/(period);
}
else if(wave_flag==3)//三角波
{
if(!flag)
{
PORTA=triangle++;
if(triangle==0)
{triangle=255;flag=1;}
}
else if(flag)
{
PORTA=triangle--;
if(triangle==255)
{triangle=1;flag=0;}
period=4000/(counter*5);
frequency=10000/(period);
}
}
}
/****************************************************************************
函數(shù)功能:主程序
入口參數(shù):
出口參數(shù):
****************************************************************************/
int main (void) __attribute__((naked));
int main(void)
{
asm("cli"); //關(guān)總中斷
io_init(); //端口初始化
timer0_init(); //中斷初始化
lcd_init();
asm("sei"); //開總中斷
display();
while(1)
{
if(change_flag==0)
{
if(show_number==1)
{
display();
show_number=0;
}
lcd_printf(period);
}
else
{
if(show_number==1)
{
display();
show_number=0;
}
lcd_printf(frequency);
}
key();
}
}
復(fù)制代碼
作者:
急不可待
時(shí)間:
2016-11-20 11:49
回帖致敬。
作者:
luoshenmini
時(shí)間:
2017-10-9 19:34
觀摩學(xué)習(xí)
作者:
zhwj0220127
時(shí)間:
2017-10-13 06:31
不錯(cuò)的資料很好
作者:
by64214
時(shí)間:
2017-10-15 07:55
謝謝分享 非常好的學(xué)習(xí)資料
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1