Trích:
Nguyên văn bởi mrsin
cám ơn anh tdm nha em sửa theo anh va chạy được rồi
Tiện đây em mở rộng thêm 1 tý là hiển thị 4 số VD:1234
em cũng viết rùi cũng không chạy mong anh sửa giúp em 
|
viết gì mà phức tạp thế.
chỉ thế này thôi:
Code:
#include <16F877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
//#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9) //Baud_min=4800 Baud_max=115200
//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
// Dinh nghia cac chan cho ket noi 74595
//#bit SCL=0x08.7
//#bit DATA=0x08.6
//#bit SCK=0x08.5
#define SCL RD5
#define DATA RD6
#define SCK RD7
#byte TRISD =0x88
void quet(unsigned char x);
void DCB(void);
unsigned int donvi,chuc,tram,nghin;
int16 num;
unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//ma led 7
void quet(unsigned char x)
{
int i,j,k,u,temp1,temp2,temp3,temp4;
for(i=0;i<8;i++)
{
temp1=x;//gan bien
temp1=temp1&0x80;//lay ra bit dau tien (bit 7)
if(temp1==0x80)//so sanh bit
DATA=1; //bang 1 thi xuat vao chip =1
else
DATA=0; //nguoc lai bang 0
x*=2; //dich bit lay bit trong so thap
SCK=0; //tao xung tren chan 11
SCK=1; //1 xung dua vào 1 bít
}
}
void chot()
{
SCL=0; //xuat du lieu ra output
SCL=1;
}
void DCB(void)
{
nghin=num/1000;
tram=(num%1000)/100;
chuc=(num%100)/10;
donvi=num%10;
}
void main()
{
trisd=0x00;
num=9875;
DCB();
quet(ma[donvi]);
quet(ma[chuc]);
quet(ma[tram]);
quet(ma[nghin]);
chot();
while(1)
{
}
}