一些实用的单片机c程序Word文档格式.docx
《一些实用的单片机c程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《一些实用的单片机c程序Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
unsignedintdd,dat;
dd=10000;
dat=0;
for(i=5;
10;
dat+=dd*temp;
dd/=10;
return(dat);
/*
89C51系列CPU编程器接收CPU程序*/
#include<
reg51.h>
intrins.h>
absacc.h>
#definee8
#definep9
#definel10
sbitled=P3^2;
sbitp27=P2^7;
sbitp26=P2^6;
sbitp36=P3^6;
sbitp37=P3^7;
sbitrst=P3^3;
sbitale=P3^5;
sbitvpp=P3^4;
bitb_break;
unsignedintadds;
//
13.8mS
voidint_t0(void)interrupt1{
TH0=-100;
b_break=1;
voidwait(unsignedcharw){
unsignedintt=w*184;
b_break=0;
TL0=-t%256-1;
TH0=-t/256;
while(b_break==0){}
voidnop(void){
_nop_();
_nop_();
unsignedcharcommand(void){
b_break=0;
while(RI==0){if(b_break==1)return(0);
RI=0;
return(SBUF);
voidearsure(unsignedcharcpu){
switch(cpu){
case1:
//89C51
case2:
rst=p26=1;
p27=p36=p37=0;
nop();
vpp=1;
ale=0;
wait(110);
ale=1;
break;
case3:
case4:
break;
case5:
case6:
voidprogram(unsignedcharcpu){
unsignedintbdataadds=0;
unsignedchard;
p36=p37=1;
rst=1;
while
(1){
while(RI==0){if(b_break==1)return;
d=SBUF;
//address
P0=adds%256;
P2=adds/256;
p27=1;
//data
P1=d;
nop();
//48clcl
//vpp
vpp=1;
//ale
wait
(1);
//100uS
ale=1;
//10uS
vpp=0;
p27=0;
P1=0xff;
while(d!
=P1){if(b_break==1)return;
}
//data
polling
SBUF=d;
adds++;
voidlock(unsignedcharcpu){
unsignedchari;
//89c51
//lock1
rst=p26=p36=p27=p37=1;
//
i++)wait(100);
//lock2
rst=p26=p27=1;
p36=p37=0;
//lock3
rst=p26=p36=1;
p27=p37=0;
voidmain(void){
unsignedchardisp,flash,temp,cpu;
EA=1;
SCON=0xd8;
PCON=0x80;
TMOD=0x21;
TL1=TH1=0xff;
TR1=1;
ET0=TR0=1;
flash=0x80;
temp=command();
switch(temp){
case0:
//89C52
//80f51
//80F52
//87F51
cpu=temp;
SBUF=temp;
//87f52
casee:
earsure(cpu);
//erasure
casep:
program(cpu);
//program
casel:
lock(cpu);
//lock
default:
if((++disp)>
flash){disp=0;
led=!
led;
//HT1380实时时钟驱动程序
sbitclock_dat=P0^1;
sbitclock_clk=P0^2;
sbitclock_rst=P0^3;
sbita0=ACC^0;
sbita1=ACC^1;
sbita2=ACC^2;
sbita3=ACC^3;
sbita4=ACC^4;
sbita5=ACC^5;
sbita6=ACC^6;
sbita7=ACC^7;
voidclock_out(unsignedchardd){
ACC=dd;
clock_dat=a0;
clock_clk=1;
clock_clk=0;
clock_dat=a1;
clock_dat=a2;
clock_dat=a3;
clock_dat=a4;
clock_dat=a5;
clock_dat=a6;
clock_dat=a7;
unsignedcharclock_in(void){
clock_dat=1;
a0=clock_dat;
clock_clk=1;
a1=clock_dat;
a2=clock_dat;
a3=clock_dat;
a4=clock_dat;
a5=clock_dat;
a6=clock_dat;
a7=clock_dat;
return(ACC);
unsignedcharread_clock(unsignedcharord){
unsignedchardd=0;
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_out(ord);
dd=clock_in();
return(dd);
voidwrite_clock(unsignedcharord,unsignedchardd){
clock_out(dd);
/*单个汉字库字摸提取程序,tc2.0编译*/
#include"
stdio.h"
dos.h"
process.h"
string.h"
longintnum_bytes,qm,wm;
unsignedchard,i,j,k,a[132],b[132];
unsignedchar*data;
unsignedchar*hz;
staticunsigned
chardd[103];
FILE*fp;
if((fp=fopen("
hzk16f"
"
rb"
))==NULL){
printf("
can'
topenhzk16\n"
);
exit
(1);
clrscr();
data=(unsignedchar*)malloc(33);
pleaseinput:
\n"
scanf("
%s"
dd);
/*输入一个汉字*/
qm=*dd;
/*通过区位码计算其在hzk16f文件中的偏移地址*/
qm=qm-161;
if(qm>
87)exit(0);
wm=*(dd+1);
wm=wm-161;
if(wm>
94)exit(0);
num_bytes=((long)qm*94+wm)*32;
fseek(fp,num_bytes,SEEK_SET);
fgets(data,33,fp);
32;
i++)b[i]=*data++;
i+=2)a[i/2]=b[i];
i+=2)a[i/2+16]=b[i+1];
for(i=8;
16;
i++)b[i]=a[i];
i++)a[i]=a[i+8];
i++)a[i+8]=b[i];
/*转换,hzf16f在电脑的储存格式是以行为字节计算的,一般的lcd都采用以列为字节计算*/
for(k=0;
k<
k+=8){
for(j=0;
j<
j++){
d=0;
if(a[i+k]>
=0x80){
switch(i){
d+=1;
d+=2;
d+=4;
d+=8;
d+=0x10;
d+=0x20;
d+=0x40;
case7:
d+=0x80;
i++)a[i+k]<
<
=1;
b[j+k]=d;
/*%s:
*/\n"
/*输出0x00格式的16进制数*/
j++)printf("
0x%x,"
b[j+k]);
getch();
//按键扫描驱动程序
unsignedcharkey,key_h,kpush;
unsignedintkey_l;
//按键连接到p1.0、p1.1、p1.2
unsignedchardd,i;
TL0=TL0+30;
TH0=0xfb;
//800
/*
按键判别
*/
if((P1&
0x7)==0x7){
if((key_l>
30)&
&
(key_l<
800)&
(key_h>
30)){
//释放按键,如果之前按键时间少于1秒,读入键值
key=kpush;
if((++key_h)>
200)key_h=200;
key_l=0;
if(key>
=0x80)key=0;
//如果之前的按键为长按1秒,清除键值
}else{
kpush=P1&
0x7;
key_l++;
//如果按键超过1秒,键值加0x80标志长按键
key=kpush|0x80;
key_h=0;
TMOD=0x1;
TR0=1;
ET0=1;
EA=1;
while(!
key){}
switch(key){
//串行驱动led显示,
//一个74hc595位移寄存器驱动三极管驱动led位,
//两个74hc595驱动led段,方式位5位x8段x2=10个数码管
//5分频,每次扫描时间位1.25ms
//定义特殊符号
#definenul0xf
#defineqc0xc
#defineqb0xb
#defineq_0xa
#defineq__0xd
#defineq___0xe
#defineqp0x10
#defineqe0x11
#defineqj0x12
#defineqn0x13
#defineqf0x14
#defineqa0x15
#defineqr0x16
#defineqd0x17
#definequ0x18
#defineql0x19
#defineqh0x1a
#defineqwen0x1b
#defineq