不好意思,上面給的程序有問題,重新改過如下:
#include "stc.h"
//#include "uart.h"
#define uint unsigned int
#define uchar unsigned char
sbit chuanganqi=P3^3;
sbit RS=P2^6;
sbit RW=P2^5;
sbit EP=P2^7;
unsigned int geshu,kuan,num;
void Timer1_int();
void delay(int z)
{
int i,j;
for(i=z;i>0;i--)
for(j=1000;j>0;j--);
}
void zhongduan2() interrupt 3 //定時器中斷1
{
num++;
// printexp1("num",num);
TL1 = 0x9C; //設置定時初值
TH1 = 0xFF; //設置定時初值 //定時100us=0.1ms
}
void Timer1_int() //定時器1初始化
{
AUXR &= 0xBF; //定時器時鐘12T模式
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x10; //設置定時器模式
TL1 = 0x9C; //設置定時初值
TH1 = 0xFF; //設置定時初值
ET1=1;
EA=1;
}
void write_com(char com) //輸入命令函數
{
RS=0;
RW=0;
EP=0;
P0=com;
delay(5);
EP=1;
delay(5);
EP=0;
}
void write_date(char date)//輸入數據函數
{
RS=1;
RW=0;
EP=0;
P0=date;
delay(5);
EP=1;
delay(5);
EP=0;
}
void write_init()//初始化函數
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void display()
{
write_com(0x80+0x00);
write_date(geshu/1000+0x30);
write_com(0x80+0x01);
write_date(geshu%1000/100+0x30);
write_com(0x80+0x02);
write_date(geshu%1000%100/10+0x30);
write_com(0x80+0x03);
write_date(geshu%10+0x30);
}
void main()
{
uart_ini();
Timer1_int();
write_init();
while(1)
{ while(chuanganqi==0)
{
TR1=1;
}
TR1=0;
if (num>=1000)
{
kuan++;
// printexp1("kuan",kuan); // kuan是托盤個數
num=0;
TR1=0;
geshu=kuan;
}
else
{
num=0;
TR1=0;
}
display();
}
} |