اتصال e2prom سریال به pic16f877a
اتصال E2PROM سریال به PIC16F877A
توضیحات به همراه فایل پروتئوس
[Dear Guest/Member you can't see link before replyclick here to register]
[Dear Guest/Member you can't see link before replyclick here to register]
1 فایل پیوست
بازی Snake بر روی Dot Matrix
سلام :hi:
هر جند پروژه ی قابلی نیست ولی چون این بخش واقعا متروکه شده گفتم بذازمش شاید نکات آموزشی خوبی واسه تازه کارایی مثه خودم توش داشته باشه.
این پروژه رو یه استاد گرامی قبل از اینکه به دانشجوهاش چیزی یاد بده ازشون خواسته منم واسه دوستم نوشتم و گفتم اینجا هم بذارمش.
کامپایلر : MicroC
میکرو : 18F452
همراه با تست پروتئوس
عیدتون هم مبارک :fan:
1 فایل پیوست
دما سنج با چهار کانال خروجی قابل تنظیم
سلام
به طور ساده بگم که تو این پروژه دما با سنسور LM35 اندازه گیری و روی سون سگمنت نمایش داده میشه
دارای چهار کانال خروجی هست که هرکدام به صورت جداگانه تنظیم میشن که بین چه دما هایی خروجی بدن
برای تنظیم,کلید Menu رو چند لحظه نگه دارین و بعد از اومدن شماره ی کانال روی سون سگمنت,
میتونید کانال مورد نظر رو به وسیله ی کلید های Incr و Decr انتخاب کنید
و بعد از اومدن روی کانال مورد نظر دوباره کلید Menu رو چند لحظه نگه دارید
تا وارد مرحله ی تنظیم بازه ی روشن بودن کانال مورد نظر بشین
و مقادیر High و Low رو تنظیم کنید.
کلا با نگه داشتن کلید Menu به منوی بعدی و با یک لحظه کلید زدن آن به منوی قبلی می روید
و با کلید های INCR و DECR میتونید مقادیر رو افزایش و کاهش بدید.
در ضمن مقادیر تنظیم شده در EEPROM ذخیره میشن تا با خاموش شدن دستگاه قرار نباشه
دوباره تنظیم شه.
در این برنامه از یه هدر هم برای کنترل سون سگمنت ها استفاده کردم که آموزش استفاده از اون رو [Dear Guest/Member you can't see link before replyclick here to register]
یه پروژه ی سادس ولی خوب گفتم چون توش از امکاناتی چون ADC,EEPROM و چگونگی هدر نویسی و استفاده از اونا رو داره شاید واسه تازه کارایی مث خودم مفید باشه
کامپایلر MikroC
میکرو 16F873
تست پروتئوس 7.10
1 فایل پیوست
هدر نه چندان کامل برای ks0108 lcd به زبان c
سلام :hi:
قبل از هر چیز ایام تاسوعا و عاشورای حسینی رو به همه ی کاربران تسلیت میگم...
خوب,اجبارا (مشق شب,تکلیف مدرسه) یه هدر برای این نوع LCD نوشتم که شامل توابع روبروست:
کد:
SetDot(signed char x,signed char y,unsigned char c);
DrawVerticalLine(unsigned char Y0,unsigned char Y1,unsigned char X,unsigned char Color);
DrawHorizontalLine(unsigned char X0,unsigned char X1,unsigned char Y,unsigned char Color);
DrawLine(signed char X0,signed char Y0,signed char X1,signed char Y1,unsigned char Color);
DrawRectangle(unsigned char X0,unsigned char Y0,unsigned char X1,unsigned char Y1,unsigned char Fill,unsigned char Color);
DrawCircle(unsigned int X,unsigned int Y,unsigned int R,unsigned char Fill,unsigned char Color);
ClearGlcd(unsigned char Color);
ShowPicture(const rom unsigned char *pic);
PutString(unsigned char line,unsigned char X,unsigned char *text);
InitGlcd(void);
برنامه ی هدر:
کد:
#define RS PORTDbits.RD0
#define RW PORTDbits.RD1
#define EN PORTDbits.RD2
#define CS1 PORTDbits.RD3
#define CS2 PORTDbits.RD4
#define RST PORTDbits.RD5
#define DirRS TRISDbits.TRISD0
#define DirRW TRISDbits.TRISD1
#define DirEN TRISDbits.TRISD2
#define DirCS1 TRISDbits.TRISD3
#define DirCS2 TRISDbits.TRISD4
#define DirRST TRISDbits.TRISD5
#define GlcdDataBus PORTB
#define DirGlcdDataBus TRISB
const rom unsigned char Bascom8x8Font[760] = {
0,0,0,0,0,0,0,0
,0,0,6,95,6,0,0,0
,0,7,3,0,7,3,0,0
,0,36,126,36,126,36,0,0
,0,36,43,106,18,0,0,0
,0,99,19,8,100,99,0,0
,0,54,73,86,32,80,0,0
,0,0,7,3,0,0,0,0
,0,0,62,65,0,0,0,0
,0,0,65,62,0,0,0,0
,0,8,62,28,62,8,0,0
,0,8,8,62,8,8,0,0
,0,0,224,96,0,0,0,0
,0,8,8,8,8,8,0,0
,0,0,96,96,0,0,0,0
,0,32,16,8,4,2,0,0
,0,62,81,73,69,62,0,0
,0,0,66,127,64,0,0,0
,0,98,81,73,73,70,0,0
,0,34,73,73,73,54,0,0
,0,24,20,18,127,16,0,0
,0,47,73,73,73,49,0,0
,0,60,74,73,73,48,0,0
,0,1,113,9,5,3,0,0
,0,54,73,73,73,54,0,0
,0,6,73,73,41,30,0,0
,0,0,108,108,0,0,0,0
,0,0,236,108,0,0,0,0
,0,8,20,34,65,0,0,0
,0,36,36,36,36,36,0,0
,0,0,65,34,20,8,0,0
,0,2,1,89,9,6,0,0
,0,62,65,93,85,30,0,0
,0,126,17,17,17,126,0,0
,0,127,73,73,73,54,0,0
,0,62,65,65,65,34,0,0
,0,127,65,65,65,62,0,0
,0,127,73,73,73,65,0,0
,0,127,9,9,9,1,0,0
,0,62,65,73,73,122,0,0
,0,127,8,8,8,127,0,0
,0,0,65,127,65,0,0,0
,0,48,64,64,64,63,0,0
,0,127,8,20,34,65,0,0
,0,127,64,64,64,64,0,0
,0,127,2,4,2,127,0,0
,0,127,2,4,8,127,0,0
,0,62,65,65,65,62,0,0
,0,127,9,9,9,6,0,0
,0,62,65,81,33,94,0,0
,0,127,9,9,25,102,0,0
,0,38,73,73,73,50,0,0
,0,1,1,127,1,1,0,0
,0,63,64,64,64,63,0,0
,0,31,32,64,32,31,0,0
,0,63,64,60,64,63,0,0
,0,99,20,8,20,99,0,0
,0,7,8,112,8,7,0,0
,0,113,73,69,67,0,0,0
,0,0,127,65,65,0,0,0
,0,2,4,8,16,32,0,0
,0,0,65,65,127,0,0,0
,0,4,2,1,2,4,0,0
,128,128,128,128,128,128,128,128
,0,0,3,7,0,0,0,0
,0,32,84,84,84,120,0,0
,0,127,68,68,68,56,0,0
,0,56,68,68,68,40,0,0
,0,56,68,68,68,127,0,0
,0,56,84,84,84,8,0,0
,0,8,126,9,9,0,0,0
,0,24,164,164,164,124,0,0
,0,127,4,4,120,0,0,0
,0,0,0,125,64,0,0,0
,0,64,128,132,125,0,0,0
,0,127,16,40,68,0,0,0
,0,0,0,127,64,0,0,0
,0,124,4,24,4,120,0,0
,0,124,4,4,120,0,0,0
,0,56,68,68,68,56,0,0
,0,252,68,68,68,56,0,0
,0,56,68,68,68,252,0,0
,0,68,120,68,4,8,0,0
,0,8,84,84,84,32,0,0
,0,4,62,68,36,0,0,0
,0,60,64,32,124,0,0,0
,0,28,32,64,32,28,0,0
,0,60,96,48,96,60,0,0
,0,108,16,16,108,0,0,0
,0,156,160,96,60,0,0,0
,0,100,84,84,76,0,0,0
,0,8,62,65,65,0,0,0
,0,0,0,119,0,0,0,0
,0,0,65,65,62,8,0,0
,0,2,1,2,1,0,0,0
};
const rom unsigned char MikroE_Logo_BMP[1024] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,192,224,112,176,176,176,176,176,176,176,176,
176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
176,176,176,176,176,176,176,176,176, 96,224,128, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 3, 35, 49, 49, 49,
49, 49, 49, 49, 51, 3,199,255,127, 31, 31, 15, 7, 7, 3, 3,
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 7, 7, 15,
15, 31,127,255,255,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 7, 6, 6, 14, 30,
30, 30, 30, 30,254,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,252,255,255,255,254, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 17, 51, 3, 3, 15,
7, 3, 3, 17,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,129,129,129,129,128,128,128,128,128,128,128,128,
128,128,128,128,128,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 98,127,111, 99, 99,
99, 99, 99, 99,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,255, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255,255, 0,255,255,255, 8,140,140,140,140,
140,140,140,140,141,159,255,240,192, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 7, 31, 63, 31, 31, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0,128,192,248,255,255,255,255, 0,255,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,127,255,128,127,127,127,112,113,113,113,113,
113,113,113,113,113,113,113,113,115,119,126,124,124,120,120,112,
112,112,112,112,112,112,112,112,112,112,112,112,112,120,120,124,
126,127,127,127,127,127,127,127, 63,192,255,127, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0
};
float sqrt( float x );
char *strcpypgm2ram(char *dest,const rom char *src);
//ResetGlcd -------------------------------------------------------------------------------------------------------------------------------------------
void ResetGlcd(void){
RST = 0;
RST = 1;
}
//LatchData -------------------------------------------------------------------------------------------------------------------------------------------
void LatchData(void){
EN = 1;
EN = 0;
Delay10TCYx(5);
}
//WriteCmdGlcd ----------------------------------------------------------------------------------------------------------------------------------------
void WriteCmdGlcd(unsigned char cmd){
RS = 0;
RW = 0;
GlcdDataBus = cmd;
LatchData();
}
//WriteDataGlcd ---------------------------------------------------------------------------------------------------------------------------------------
void WriteDataGlcd(unsigned char data){
RS = 1;
RW = 0;
GlcdDataBus = data;
LatchData();
}
//ReadDataGlcd ----------------------------------------------------------------------------------------------------------------------------------------
unsigned char ReadDataGlcd(void){
unsigned char data;
RS = 1;
RW = 1;
DirGlcdDataBus = 0xFF;
EN = 1;
EN = 0;
EN = 1;
Delay10TCYx(1);
data = GlcdDataBus;
EN = 0;
DirGlcdDataBus = 0x00;
return(data);
}
//LeftSelect ------------------------------------------------------------------------------------------------------------------------------------------
void LeftSelect(void){
CS1 = 0;
CS2 = 1;
}
//RightSelect -----------------------------------------------------------------------------------------------------------------------------------------
void RightSelect(void){
CS1 = 1;
CS2 = 0;
}
//SetDot -------------------------------------------------------------------------------------------------------------------------------------------Ex
void SetDot(signed char x,signed char y,unsigned char c){
unsigned char data;
if(x<64) {
LeftSelect();
x = x|0x40;
}else {
RightSelect();
x = (x-64)|0x40;
}
WriteCmdGlcd(x);
WriteCmdGlcd((y/8)|0xB8);
data = ReadDataGlcd();
WriteCmdGlcd(x);
WriteDataGlcd(c ? ((1<<(y-((y/8)*8)))|data) : ((~(1<<(y-((y/8)*8))))&data));
}
//DrawVerticalLine ----------------------------------------------------------------------------------------------------------------------------------Ex
void DrawVerticalLine(unsigned char Y0,unsigned char Y1,unsigned char X,unsigned char Color) {
for(Y0;Y0<=Y1;Y0++) SetDot(X,Y0,Color);
}
//DrawHorizontalLine -------------------------------------------------------------------------------------------------------------------------------Ex
void DrawHorizontalLine(unsigned char X0,unsigned char X1,unsigned char Y,unsigned char Color) {
for(X0;X0<=X1;X0++) SetDot(X0,Y,Color);
}
//DrawLine -----------------------------------------------------------------------------------------------------------------------------------------Ex
void DrawLine(signed char X0,signed char Y0,signed char X1,signed char Y1,unsigned char Color) {
signed int Dy,Dx,Fraction;
signed char StepX,StepY;
Dy=Y1-Y0;
Dx=X1-X0;
if(Dy<0) {Dy=-Dy;StepY=-1;} else {StepY=1;}
if(Dx<0) {Dx=-Dx;StepX=-1;} else {StepX=1;}
Dy<<=1;
Dx<<=1;
SetDot(X0,Y0,Color);
if(Dx>Dy) {
Fraction=Dy-(Dx>>1);
while(X0!=X1) {
if(Fraction>=0) {
Y0+=StepY;
Fraction-=Dx;
}
X0+=StepX;
Fraction+=Dy;
SetDot(X0,Y0,Color);
}
}else {
Fraction=Dx-(Dy>>1);
while (Y0!=Y1) {
if(Fraction>=0) {
X0+=StepX;
Fraction-=Dy;
}
Y0+=StepY;
Fraction+=Dx;
SetDot(X0,Y0,Color);
}
}
}
//DrawRectangle -------------------------------------------------------------------------------------------------------------------------------------Ex
void DrawRectangle(unsigned char X0,unsigned char Y0,unsigned char X1,unsigned char Y1,unsigned char Fill,unsigned char Color) {
if(Fill) {
for(Y0;Y0<=Y1;Y0++)
DrawHorizontalLine(X0,X1,Y0,Color);
}else {
DrawHorizontalLine(X0,X1,Y0,Color);
DrawVerticalLine(Y0,Y1,X0,Color);
DrawHorizontalLine(X0,X1,Y1,Color);
DrawVerticalLine(Y0,Y1,X1,Color);
}
}
//DrawCircle ----------------------------------------------------------------------------------------------------------------------------------------Ex
void DrawCircle(unsigned int X,unsigned int Y,unsigned int R,unsigned char Fill,unsigned char Color) {
unsigned int Rx,Ry;
if(Fill) {
for(Rx=0;Rx<=R;Rx++) {
Ry = sqrt((R*R)-(Rx*Rx));
DrawHorizontalLine(X-Ry,X+Ry,Y+Rx,Color);
DrawHorizontalLine(X-Ry,X+Ry,Y-Rx,Color);
}
}else {
for(Rx=0;Rx<=R;Rx++) {
Ry = sqrt((R*R)-(Rx*Rx));
SetDot(Rx+X,Ry+Y,Color);
SetDot(Ry+X,Rx+Y,Color);
SetDot((Rx*-1)+X,Ry+Y,Color);
SetDot(Ry+X,(Rx*-1)+Y,Color);
SetDot(Rx+X,(Ry*-1)+Y,Color);
SetDot((Ry*-1)+X,Rx+Y,Color);
SetDot((Rx*-1)+X,(Ry*-1)+Y,Color);
SetDot((Ry*-1)+X,(Rx*-1)+Y,Color);
}
}
}
//ClsGlcd -------------------------------------------------------------------------------------------------------------------------------------------Ex
void ClearGlcd(unsigned char Color){
unsigned char Page,X,R;
Color *= 255;
for(R=0;R<2;R++) {
if(R == 0) LeftSelect();
else RightSelect();
for(Page=0;Page<8;Page++){
WriteCmdGlcd(Page|0xB8);
WriteCmdGlcd(0x40);
for(X=0;X<64;X++) WriteDataGlcd(Color);
}
}
}
//ShowPicture ---------------------------------------------------------------------------------------------------------------------------------------Ex
void ShowPicture(const rom unsigned char *pic){
unsigned char Page,X,R;
unsigned int P;
for(R=0;R<2;R++) {
if(R == 0) {
P = 0;
LeftSelect();
}else {
P = 64;
RightSelect();
}
for(Page=0;Page<8;Page++){
WriteCmdGlcd(Page|0xB8);
WriteCmdGlcd(0x40);
for(X=0;X<64;X++) {
WriteDataGlcd(pic[P]);
P++;
}
P += 64;
}
}
}
//PutString -----------------------------------------------------------------------------------------------------------------------------------------Ex
void PutString(unsigned char line,unsigned char X,unsigned char *text){
unsigned int R,P=0;
while(text[P] != 0) {
for(R=0;R<8;R++) {
if(X<64) {
LeftSelect();
WriteCmdGlcd(X|0x40);
}else {
RightSelect();
WriteCmdGlcd((X-64)|0x40);
}
WriteCmdGlcd(line|0xB8);
WriteDataGlcd(Bascom8x8Font[(((unsigned int)text[P]-32)*8)+R]);
X++;
}
P++;
}
}
//InitGlcd ------------------------------------------------------------------------------------------------------------------------------------------Ex
void InitGlcd(void){
DirRS = 0;
DirRW = 0;
DirEN = 0;
DirCS1 = 0;
DirCS2 = 0;
DirRST = 0;
DirGlcdDataBus = 0x00;
RS = 0;
RW = 0;
EN = 0;
CS1 = 0;
CS2 = 0;
RST = 0;
GlcdDataBus = 0x00;
ResetGlcd();
ClearGlcd(0);
}
هدر برای کامپایلر PIC MPLAB C18 نوشته شده
به همراه یه مثال و شبیه سازی با پروتئوس
PDF توضیحات و آموزش هدر
دیتاشیت چیپ KS0108
و نرم افزار GLCD BMP Editor شرکت MikroEleKtroniKa ضمیمه شده اند.
1 فایل پیوست
دستگاه هشدار افزایش دما و گاز های آلاینده
سلام بعد عمری ی پروژه ساده دیگه میذارم :hi:
از اسمش که معلومه یه مداره که اگر دما یا گاز آلاینده از حد مجاز بیشتر شد (قابل تنظیمه و تنظیمات اعمال شده در EEPROM ذخیره میشه ) رله ی مربوط به آن وصل میشه(دما و گاز هر کدام رله جداگانه دارن) و تا کلیدش رو نزدیم قطع نمی کنه.
کامپایلر : MikroC
میکرو : PIC16F873
همراه با فایل پروتئوس ورژن 8.1 (پی سی بی , شماتیک و شبیه سازی)
به همراه ی PDF آموزش کار با سنسور های گاز
و فایل Word توضیح مختصری در مورد عملکرد مدار
موفق باشید :wink: