一些实用的单片机c程序Word文档格式.docx

上传人:b****2 文档编号:4151648 上传时间:2023-05-02 格式:DOCX 页数:15 大小:18.48KB
下载 相关 举报
一些实用的单片机c程序Word文档格式.docx_第1页
第1页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第2页
第2页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第3页
第3页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第4页
第4页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第5页
第5页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第6页
第6页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第7页
第7页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第8页
第8页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第9页
第9页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第10页
第10页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第11页
第11页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第12页
第12页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第13页
第13页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第14页
第14页 / 共15页
一些实用的单片机c程序Word文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

一些实用的单片机c程序Word文档格式.docx

《一些实用的单片机c程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《一些实用的单片机c程序Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

一些实用的单片机c程序Word文档格式.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2