?? jhdavrtest.c
字號(hào):
#include <avr/io.h>
//#include <intrins.h>
#include <string.h>
/*
//本程序?yàn)镾T7920驅(qū)動(dòng)
sbit RST = P2^0;//RESET
sbit EN = P2^1;//E
sbit RW = P2^2;//R/W
sbit RS = P2^3;//RS
#define DATA P0
*/
#define JHD_IO PORTC
#define JHD_PIN PINC
#define JHD_IODDR DDRC
#define JHD_Ctrl PORTD
#define JHD_RST PD0
#define JHD_EN PD1
#define JHD_RW PD2
#define JHD_RS PD3
unsigned char adch,adcl;
unsigned int adc;
unsigned int VolShow;
unsigned int CurShow;
unsigned char str1[]="--開(kāi)關(guān)穩(wěn)壓電源--";
unsigned char str2[]="輸出電壓: V";
unsigned char str3[]="輸出電流: A";
/*
#define clr_LCD12864_RST LCD12864_Ctrl &= ~_BV(LCD12864_RST);
#define set_LCD12864_RST LCD12864_Ctrl |= _BV(LCD12864_RST);
#define clr_LCD12864_EN LCD12864_Ctrl &= ~_BV(LCD12864_EN);
#define set_LCD12864_EN LCD12864_Ctrl |= _BV(LCD12864_EN);
#define clr_LCD12864_RW LCD12864_Ctrl &= ~_BV(LCD12864_RW);
#define set_LCD12864_RW LCD12864_Ctrl |= _BV(LCD12864_RW);
#define clr_LCD12864_DIN LCD12864_Ctrl &= ~_BV(LCD12864_DIN);
#define set_LCD12864_DIN LCD12864_Ctrl |= _BV(LCD12864_DIN);
*/
#define clr_RST JHD_Ctrl &= ~_BV(JHD_RST);
#define set_RST JHD_Ctrl |= _BV(JHD_RST);
#define clr_EN JHD_Ctrl &= ~_BV(JHD_EN);
#define set_EN JHD_Ctrl |= _BV(JHD_EN);
#define clr_RW JHD_Ctrl &= ~_BV(JHD_RW);
#define set_RW JHD_Ctrl |= _BV(JHD_RW);
#define clr_RS JHD_Ctrl &= ~_BV(JHD_RS);
#define set_RS JHD_Ctrl |= _BV(JHD_RS);
unsigned char LCD_addr[4][8]=
{
{0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87},
{0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97},
{0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f},
{0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}
};
void InitLcd(void);
void WriteData(unsigned char ch);
void WriteCmd(unsigned char ch);
void ShowASC(unsigned char x,unsigned char *p);
void ShowChinese(unsigned char x,unsigned char *p);
void ShowStr(unsigned char x,unsigned char y,unsigned char *p);
void ShowChar(unsigned char x,unsigned char y,unsigned char ch);
unsigned char ReadRAM(unsigned char x,unsigned char y);
void ClrDGRAM(void);
void PaintPoint(unsigned char x,unsigned char y);
/////////////////////////////////////////////////////////////////////////////////////
#define Snd_dian 11
#define Snd_V 12
#define Snd_A 13
#define setPlaySnd PORTB |= _BV(PB0);//播放語(yǔ)音1
#define clrPlaySnd PORTB &= ~_BV(PB0);//播放語(yǔ)音0
void PlaySound(unsigned char index)
{
unsigned char j;
unsigned int i;
setPlaySnd;
PORTD &= 0x0f; //高四位清0
PORTD |=(index<<4);
clrPlaySnd;
//for(i=0;i<33000;i++);
for(j=0;j<8;j++)
for(i=0;i<34780;i++);
}
///////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
unsigned int i;
unsigned int de;
DDRC=0xff;
PORTC=0xff;
DDRD=0xff;
PORTD=0xff;
PORTB=0xff;
DDRB=0xff;
DDRB &= ~_BV(PB1); //按鍵
InitLcd();
//ClrDGRAM();
// ClrDGRAM();
//WriteCmd(0x34);
// WriteCmd(0x05);
// WriteCmd(0x30);
VolShow=123;
CurShow=201;
str2[10]='3';
str2[11]='6';
str2[12]='.';
str2[13]='0';
str3[10]='2';
str3[11]='.';
str3[12]='0';
str3[13]='1';
ADMUX |= _BV(REFS1) + _BV(REFS0) /*+ _BV(ADLAR)*/ ;//使用片內(nèi)2.56V基準(zhǔn)電壓,數(shù)據(jù)左對(duì)齊
ADCSRA |= _BV(ADEN) +/* _BV(ADSC) + _BV(ADIE)+ */_BV(ADPS1) + _BV(ADPS2) ;//AD使能,中斷使能,64分頻 125KHz,轉(zhuǎn)換時(shí)間:1.5*8+13*8=116us,啟動(dòng)首次轉(zhuǎn)換
while(1)
{
// WriteCmd(0x06);
// WriteCmd(0x07);
ADMUX &= ~_BV(MUX0);//通道0
ADCSRA |= _BV(ADSC);//啟動(dòng)轉(zhuǎn)換
while(!(ADCSRA & _BV(ADIF)));//轉(zhuǎn)換結(jié)束不?
ADCSRA |= _BV(ADIF);//清0
adcl=ADCL;
adch=ADCH;
adc=adch*256+adcl;
VolShow=adc/2;
str2[10]=(VolShow/100)%10+'0';
str2[11]=(VolShow/10)%10+'0';
str2[12]='.';
str2[13]=VolShow%10+'0';
ADMUX |= _BV(MUX0);//通道1
ADCSRA |= _BV(ADSC);//啟動(dòng)轉(zhuǎn)換
while(!(ADCSRA & _BV(ADIF)));//轉(zhuǎn)換結(jié)束不?
ADCSRA |= _BV(ADIF);//清0
adcl=ADCL;
adch=ADCH;
adc=adch*256+adcl;
CurShow=adc*1.748;///2/*/0.143*/;
str3[10]=(CurShow/100)%10+'0';
str3[11]='.';
str3[12]=(CurShow/10)%10+'0';
str3[13]=CurShow%10+'0';
ShowStr(0,0,str1);
ShowStr(0,1,str2);
ShowStr(0,2,str3);
//ShowStr(0,1,str2);
if(adc>=65535)ShowStr(0,3,"電壓超出范圍");
else ShowStr(0,3," ");
for(i=0;i<60000;i++);
if(!(PINB & 0x02)) //有鍵盤按下
{
for(de=0;de<10000;de++);
if(!(PINB & 0x02)) //有鍵盤按下
{
while(!(PINB & 0x02));
// for(de=0;de<16;de++)
// {
// PlaySound(de);
// }
if((VolShow/100)%10 !=0)
{
PlaySound((VolShow/100)%10);
PlaySound(10);
}
if((VolShow/10)%10 !=0)PlaySound((VolShow/10)%10);
PlaySound(Snd_dian);
PlaySound(VolShow%10);
PlaySound(Snd_V);
for(de=0;de<1000;de++);
PlaySound((CurShow/100)%10);
PlaySound(Snd_dian);
PlaySound((CurShow/10)%10);
PlaySound(CurShow%10);
PlaySound(Snd_A);
}
}
}
}
void InitLcd(void)
{
clr_RST;
// wait_5ms();
set_RST;
//wait_5ms();
//wait_5ms();
WriteCmd(0x30); //功能設(shè)定,8位接口,基本指令集
//WriteCmd(0x34); //功能設(shè)定,8位接口,基本指令集
WriteCmd(0x0c); //開(kāi)顯示
WriteCmd(0x01); //清屏
WriteCmd(0x02); //進(jìn)入設(shè)定點(diǎn)
// WriteCmd(0x80);
}
void LCDBusy(void)
{
JHD_IODDR=0x00;//輸入
while(1)
{
clr_RS;
set_RW;
set_EN;
if(!(JHD_PIN & 0x80))break;
clr_EN;
}
JHD_IODDR=0xff;
}
void WriteData(unsigned char ch)
{
LCDBusy();
//EN = 0;
set_RS; //寫數(shù)據(jù)
clr_RW;
// _nop_();
set_EN;
JHD_IO = ch;
//_nop_();
clr_EN;
clr_RS;
}
void WriteCmd(unsigned char ch)
{
LCDBusy();
//EN = 0;
clr_RS;
clr_RW;
// _nop_();
set_EN;
JHD_IO = ch;
// _nop_();
clr_EN;
}
void ShowStr(unsigned char x,unsigned char y,unsigned char *p)
{
unsigned char i;
i=strlen(p);
i/=2;
while(i--)
{
if(x>=8)
{
y++;
x=0;
}
if(y>=4)break;
WriteCmd(LCD_addr[y][x]);
WriteData(*p);
p++;
WriteData(*p);
p++;
x++;
}
}
void ClrDGRAM(void)
{
unsigned char i,j;
WriteCmd(0x34);
WriteCmd(0x36);
for(i=0;i<32;i++)
{
WriteCmd(0x80|i);
WriteCmd(0x80);
for(j=0;j<16;j++)
{
//WriteCmd(0x34);
WriteData(0);
WriteData(0);
//WriteCmd(0x36);
}
}
//WriteCmd(0x36);
WriteCmd(0x30);
}
void PaintPoint(unsigned char y,unsigned char x)
{
//WriteCmd(0x01);
unsigned char col,row;
unsigned char temp;
unsigned char dat1,dat2;
if(y<32)
{
row=y;
col=x;
temp=(col+16)%16;
}else if(y>=32)
{
row=y-32;
col=x+128;
temp=col%16;
}
col/=16;
if(dat1<8)
{
dat2=0x80>>temp;
dat1=0;
}else
{
dat2=0;
dat1=0x80>>(temp-8);
}
WriteCmd(0x34);
WriteCmd(0x36);
WriteCmd(0x80+row);
WriteCmd(0x80+col);
WriteData(dat1);
WriteData(dat2);
WriteCmd(0x36);
WriteCmd(0x30);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -