



















Preview text:
lOMoAR cPSD| 58583460 Bài 1: #include void delay(int time) { while (time--) ; } int i; void main() { while (1) { P2 = 0x00; for (i = 0; i < 8; i++) { P2 = (P2 << 1)|0x01; delay(30000); } for (i = 0; i < 8; i++) { P2 = P2 << 1; delay(30000); } } } Bài 2: lOMoAR cPSD| 58583460 #include sbit dendo1 = P1^0; sbit denvang1 = P1^1; sbit denxanh1 = P1^2; sbit
dendo2 = P1^3; sbit denvang2 = P1^4; sbit denxanh2 = P1^5; #define led1 P2 #define led2
P3 sbit DV = P0^0; sbit Chuc = P0^1; sbit chinhtay = P1^6; sbit tudong = P1^7;
unsigned char code Code7seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; int dem; int tanso; void delay(int time) { while (time--); } void chedotudong(void){ dendo1 = 1; dendo2 = 0; denvang1 = 0; denvang2 = 0; denxanh1 = 0; denxanh2 = 1;
for (dem = 10; dem >= 3; dem--) {
for (tanso = 0; tanso < 15; tanso++) { int dem2 = dem - 3; int chuc = dem2 / 10; int dvi = dem2 % 10; DV = 1; P3 = Code7seg[dem % 10]; P2 = Code7seg[dvi]; delay(4000); DV = 0; lOMoAR cPSD| 58583460 Chuc = 1; P3 = Code7seg[dem / 10]; P2 = Code7seg[chuc]; delay(4000); Chuc = 0; } } denvang1 = 0; denvang2 = 1; denxanh1 = 0; denxanh2 = 0;
for (dem = 2; dem >= 0; dem--) {
for (tanso = 0; tanso < 15; tanso++) { DV = 1; P3 = Code7seg[dem % 10]; P2 = Code7seg[dem % 10]; delay(4000); DV = 0; Chuc = 1; P3 = Code7seg[dem / 10]; P2 = Code7seg[dem / 10]; delay(4000); Chuc = 0; } } dendo1 = 0; dendo2 = 1; denvang1 = 0; denvang2 = 0; denxanh1 = 1; denxanh2 = 0;
for (dem = 10; dem >= 3; dem--) {
for (tanso = 0; tanso < 15; tanso++) { int dem2 = dem - 3; int chuc = dem2 / 10; int dvi = dem2 % 10; DV = 1; P2 = Code7seg[dem % 10]; P3 = Code7seg[dvi]; lOMoAR cPSD| 58583460 delay(4000); lOMoAR cPSD| 58583460 lOMoAR cPSD| 58583460 DV = 0; Chuc = 1; P2 = Code7seg[dem / 10]; P3 = Code7seg[chuc]; delay(4000); Chuc = 0; } } denvang1 = 1; denvang2 = 0; denxanh1 = 0; denxanh2 = 0;
for (dem = 2; dem >= 0; dem--) {
for (tanso = 0; tanso < 15; tanso++) { DV = 1; P2 = Code7seg[dem % 10]; P3 = Code7seg[dem % 10]; delay(4000); DV = 0; Chuc = 1; P2 = Code7seg[dem / 10]; P3 = Code7seg[dem / 10]; delay(4000); Chuc = 0; } } } void main(){ if (tudong == 0){ if(chinhtay == 1){ dendo1 = 1; dendo2 = 0; denvang1 = 0; denvang2 = 0; denxanh1 = 0; denxanh2 = 1; } if(chinhtay == 0){ dendo1 = 0; lOMoAR cPSD| 58583460 dendo2 = 1; denvang1 = 0; denvang2 = 0; denxanh1 = 1; denxanh2 = 0; } } else if(tudong == 1){ chedotudong(); } } lOMoAR cPSD| 58583460
Bài 3: lịch vạn niên mô phỏng #ifndef __DELAY_H__ #define __DELAY_H__
void delay_us(unsigned int us_count); void delay_ms(unsigned int ms_count); void
delay_sec(unsigned char sec_count); #endif #include #include "delay.h"
void delay_us(unsigned int us_count) { while(us_count!=0) { us_count--; } }
// the #ifndef prevents the file from being included more than once #ifndef __DS1307_H__ #define __DS1307_H__ void ds1307_Init();
void ds1307_Write(unsigned char dat);
void ds1307_SetTime(unsigned char hh, unsigned char mm, unsigned char ss); void ds1307_SetDate(unsigned
char dd, unsigned char mm, unsigned char yy); void ds1307_GetTime(unsigned char *h_ptr,unsigned char *m_ptr,unsigned char *s_ptr);
void ds1307_GetDate(unsigned char *d_ptr,unsigned char *m_ptr,unsigned char *y_ptr); #endif #include #include "ds1307.h" #include "i2c.h" #include "delay.h" lOMoAR cPSD| 58583460
/* Below given values are fixed and should not be changed.
Refer Ds1307 DataSheet for more info*/
#define DS1307_ID 0xD0 // ds1307 ID
#define SEC_ADDRESS 0x00 // address to access ds1307 SEC register
#define DATE_ADDRESS 0x04 // address to access ds1307 DATE register
#define control 0x07 // address to access ds1307 CONTROL register //ds1307 initilization void ds1307_Init() {
i2c_Start(); // Start i2c communication ds1307_Write(DS1307_ID); ds1307_Write(control); ds1307_Write(0x00); i2c_Stop(); }
void ds1307_Write(unsigned char dat) { i2c_Write(dat); i2c_Clock(); } unsigned char ds1307_Read() { unsigned char dat; dat = i2c_Read(); return(dat); }
void ds1307_SetTime(unsigned char hh, unsigned char mm, unsigned char ss) { lOMoAR cPSD| 58583460 lOMoAR cPSD| 58583460
i2c_Start(); // Start i2c communication ds1307_Write(DS1307_ID); ds1307_Write(SEC_ADDRESS); ds1307_Write(ss); ds1307_Write(mm); ds1307_Write(hh);
i2c_Stop(); // Stop i2c communication after Setting the Time }
void ds1307_SetTimeAuto(void) {
i2c_Start(); // Start i2c communication
ds1307_Write(DS1307_ID); ds1307_Write(SEC_ADDRESS);
i2c_Stop(); // Stop i2c communication after Setting the Time }
void ds1307_SetDate(unsigned char dd, unsigned char mm, unsigned char yy) {
i2c_Start(); // Start i2c communication ds1307_Write(DS1307_ID); ds1307_Write(DATE_ADDRESS); ds1307_Write(dd); ds1307_Write(mm); ds1307_Write(yy);
i2c_Stop(); // Stop i2c communication after Setting the Date }
void ds1307_SetDateAuto(void) {
i2c_Start(); // Start i2c communication ds1307_Write(DS1307_ID); ds1307_Write(DATE_ADDRESS);
i2c_Stop(); // Stop i2c communication after Setting the Date } lOMoAR cPSD| 58583460 lOMoAR cPSD| 58583460
void ds1307_GetTime(unsigned char *h_ptr,unsigned char *m_ptr,unsigned char *s_ptr) {
i2c_Start(); // Start i2c communication ds1307_Write(DS1307_ID); ds1307_Write(SEC_ADDRESS); i2c_Stop(); i2c_Start(); ds1307_Write(0xD1);
*s_ptr = ds1307_Read(); i2c_Ack();
*m_ptr = ds1307_Read(); i2c_Ack(); *h_ptr = ds1307_Read(); i2c_NoAck();
i2c_Stop(); // stop i2c communication after reading the Time }
void ds1307_GetDate(unsigned char *d_ptr,unsigned char *m_ptr,unsigned char *y_ptr) {
i2c_Start(); // start i2c communication ds1307_Write(DS1307_ID); ds1307_Write(DATE_ADDRESS); i2c_Stop(); i2c_Start(); ds1307_Write(0xD1);
*d_ptr = ds1307_Read(); i2c_Ack();
*m_ptr = ds1307_Read(); i2c_Ack(); *y_ptr = ds1307_Read(); i2c_NoAck();
i2c_Stop(); // stop i2c communication after reading the Time }
// the #ifndef prevents the file from being included more than once #ifndef __I2C_H__ lOMoAR cPSD| 58583460 lOMoAR cPSD| 58583460 #define __I2C_H__ void i2c_Clock(void);
void i2c_Start(); void i2c_Stop(void); void i2c_Write(unsigned char
); unsigned char i2c_Read(void); void i2c_Ack(); void i2c_NoAck(); #endif #include #include "delay.h" #include "i2c.h"
sbit SCL=P2^0; //SCL Connected to P2.0 sbit SDA=P2^1; //SDA Connected to P2.1 void i2c_Clock(void) { delay_us(50); SCL = 1; delay_us(50); SCL = 0; } void i2c_Start() { SCL = 0; // pull SCL low SDA = 1; // pull SDA High delay_us(50); SCL = 1; //pull SCL high delay_us(50);
SDA = 0; //Now pull SDA LOW, to generate the Start Condition delay_us(50);
SCL = 0; //Finally Clear the SCL to complete the cycle } void i2c_Stop(void) lOMoAR cPSD| 58583460 { SCL = 0; // pull SCL low delay_us(50); SDA = 0; // pull SDA low delay_us(50); SCL = 1; // pull SCL High delay_us(50);
SDA = 1; // Now pull SDA High, to generate the Stop Condition }
void i2c_Write(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) {
SDA = dat & 0x80; i2c_Clock(); dat = dat<<1; } SDA = 1; }
unsigned char i2c_Read(void) { unsigned char i, dat=0x00; SDA=1; for(i=0;i<8;i++) { delay_us(50); SCL = 1; delay_us(50);
dat = dat<<1; dat = dat | SDA; SCL = 0; } lOMoAR cPSD| 58583460 return dat; } void i2c_Ack() { SDA = 0; i2c_Clock(); SDA = 1; } void i2c_NoAck() { SDA = 1; i2c_Clock(); SCL = 1; }
// the #ifndef prevents the file from being included more than once #ifndef __LCD_H__ #define __LCD_H__ void lcd_Init();
void lcd_WriteCmd( char cmd); void lcd_Writedata( char a);
void lcd_DisplayString(char *string_ptr); void
lcd_DisplayNumber(unsigned int num); void
lcd_ScrollMessage(char *msg_ptr);
void lcd_DisplayRtcTime(char hour,char min,char sec); void
lcd_DisplayRtcDate(char day,char month,char year); void lcd_Clear(); void
lcd_GoToLineOne(); void lcd_GoToLineTwo();
void lcd_GoToXY(char row, char col); #endif #include #include "lcd.h" #include "delay.h"
#define dataport P1 // LCD dataport connected to PORT1 lOMoAR cPSD| 58583460
sbit rs= dataport^0; // Register select pin connected to P1.0
sbit rw= dataport^1; // Read Write pin connected to P1.1 sbit en= dataport^2; // Enable pin connected to P1.2 /* 16x2 lcd Specification */ #define LCDMaxLines 2 #define LCDMaxChars 16 #define LineOne 0x80 #define LineTwo 0xc0 #define BlankSpace ' ' //LCD initilization void LCD_Init() { delay_us(5000);
lcd_WriteCmd(0x02); //initilize the LCD in 4bit Mode lcd_WriteCmd(0x28);
lcd_WriteCmd(0x0C); // display ON cursor ON
lcd_WriteCmd(0x01); // clear the LCD
lcd_WriteCmd(0x80); // move the Cursor to First line First Position }
// lcd Write command function void lcd_WriteCmd( char a) { dataport=(a & 0xf0); rs=0; rw=0; en=1; lOMoAR cPSD| 58583460 delay_us(1); en=0; delay_us(1);
dataport=((a<<4) & 0xf0); rs=0; rw=0; en=1; delay_us(1); en=0; delay_us(1); }
// lcd writedata function void lcd_Writedata( char a) { dataport=(a & 0xf0); rs=1; rw=0; en=1; delay_us(1); en=0; delay_us(1);
dataport=((a <<4) & 0xf0); rs=1; rw=0; en=1; delay_us(1); en=0; delay_us(1); }
//lcd gotolinetwo fuction void lcd_GoToLineTwo() {
lcd_WriteCmd(LineTwo); // move the Cursor to Second line First Position lOMoAR cPSD| 58583460 }
//lcd go to X(first row), Y(second row) line