怎样给电路板上的芯片写入程序

怎样给电路板上的芯片写入程序,第1张

1直接按键盘的F4键,单击“变换”菜单栏,然后单击第一个“变换”项,单击工具栏上的“程序变更”按钮,根据自己的习惯选择合适的变换方法。

2程序更改后,有必要检查程序是否有语法错误。这种检查只能自我诊断语法,与设计内容无关。程序检查需要单击工具菜单栏中的“程序检查”。

3建议有双线圈输出,因为一些“手动/自动”双线圈输出也正常。

4检查正确后,您可以将程序写入PLC:单击菜单栏中的在线写入。

5直接单击工具栏中的“写入”按钮。

6单击并写入后,系统将提示您编写内容。您可以选择仅编写程序而不编写注释,也可以选择全部。建议在PLC存储器允许时写入所有程序,参数和注释,这将有助于您稍后进行调试。

7单击“执行”后,将出现多个提示窗口。选择提示内容后,选择“是”直到编写程序。

/数显秒表——火柴天堂作品-20121210/

/源程序默认硬件环境:52单片机,110592MHz晶振,四位共阳数码管,P0段选,P20-P23高电平位选,P20最高位,P23最低位,P14-17四独立按键(开始,停止,继续,清零)/

/功能要求:数码管高2位显示“分”,低2位显示“秒”,中间使用小数点(常亮)分隔/

#include"reg52h"//包含52头文件

#define TRUE 1//定义布尔量'1':真

#define FALSE 0//定义布尔量'0':假

#define uchar unsigned char//定义 无符号字符型数据 简称

#define uint unsigned int//定义 无符号整型数据 简称

#define th0 0x4c

#define tl0 0x00//50ms at 110592MHz(定时器工作模式1 状态)

#define th1 0xfc

#define tl1 0x66//1ms at 110592MHz(定时器工作模式1 状态)

#define T1sAt50msCount 20//定义 1s 在 50ms 计时基准状态下 的计数值 为20

#define SEG_Num 4

#define SEG_Data P0//数码管段驱动接口

#define SEG_En P2//数码管位驱动接口

#define SEG_AllOff (SEG_En&=0xf0)//关闭所有数码管(位驱动)

#define DisTimeAt1msCount 4//单'位'数码管显示时间,数码管刷新频率f=1/(Nt),其中 N为数码管位数,t 为单'位'数码管显示时间

uchar code SEG_B_List[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管代码表"0-9"

sbit KeyStart=P1^4;//开始键

sbit KeyStop=P1^5;//停止键

sbit KeyGoOn=P1^6;//继续键

sbit KeyClear=P1^7;//清零键

#define NotKeyValue 0//无按键键值

#define KeyStartValue 1//开始键键值

#define KeyStopValue 2//停止键键值

#define KeyGoOnValue 3//继续键键值

#define KeyClearValue 4//清零键键值

uchar Sec=0,Min=0;//秒、分 寄存器

uchar bdata Flag=2;//标志位 寄存器

sbit T1sTimesUpFlag=Flag^0;//1s时间到标志位

sbit DisplayFlag=Flag^1;//显示(刷新)标志位

sbit ClockStartFlag=Flag^2;//时钟开始标志位

sbit ClearFlag=Flag^3;//清零(请求)标志位

void Timer0() interrupt 1//定时器0中断函数

{

static uchar t50ms;

TL0=tl0;

TH0=th0;

if(!ClearFlag)//无 清零请求

{

t50ms=++t50ms%T1sAt50msCount;//先对50ms计时变量加1,后对变量范围进行限制(0~19)(即对20取模)

if(!t50ms) T1sTimesUpFlag=TRUE;//若计时变量归0,表示计时变量曾经到达20(1s),则对1s计时标志位 置位

}

else//有 清零请求

{

t50ms=0;//清 50ms寄存器

ClearFlag=FALSE;//清 清零标志位

}

}

void Timer1() interrupt 3

{

static uchar t1ms;

TL1=tl1;

TH1=th1;

t1ms=++t1ms%DisTimeAt1msCount;//先计数值加1,后对计数范围进行限制0~(DisTimeAt1msCount-1)

if(!t1ms) DisplayFlag=TRUE;//若定时计数值归0,则表示计数值曾到达 单'位'显示时间(DisTimeAt1msCount),显示标志 置位

}

void TimerInit()

{

TMOD=0x11;//开启定时器0、定时器1,并都工作在模式1

TH0=th0;

TL0=tl0;

TR0=0;//未启动T0定时器 计时(上电时,秒表停止状态)

ET0=1;//允许定时器0中断

TH1=th1;

TL1=tl1;

TR1=1;//启动T1定时器 计时

ET1=1;//允许定时器1中断

EA=1;//开启系统中断功能

}

void TimesUpdata()//时间更新函数

{

if(T1sTimesUpFlag)//若 1s计时标志位 为 真,即 1s定时时间到

{

Sec=++Sec%60;//秒Sec在0-59范围内加1

if(!Sec) Min=++Min%60;//若秒Sec 重归0,则分Min在0-59范围内加1

//if(!Sec) Min=++Min%100;//分Min 计数范围0-99(与上一条语句2选1)

T1sTimesUpFlag=FALSE;//清 1s计时标志位

}

}

uchar KeyScan()

{

if(KeyStart && KeyStop && KeyGoOn && KeyClear) return NotKeyValue;//无按键按下,返回 无按键键值

if(!KeyStart) return KeyStartValue;//开始键按下,返回 开始键键值

if(!KeyStop) return KeyStopValue;//停止键按下,返回 停止键键值

if(!KeyGoOn) return KeyGoOnValue;//继续键按下,返回 继续键键值

if(!KeyClear) return KeyClearValue;//清零键按下,返回 清零键键值

return NotKeyValue;//误 *** 作,返回 无按键键值

}

void KeyResp()//按键响应函数

{

static uchar KeyValue;//定义静态变量 存储按键值,设置位

static bit KeyDownFlag,KeyReadyFlag;//定义静态变量 按键按下标志位,按键准备(响应)标志位

uchar key_value=KeyScan();//调用 按键扫描函数,并将扫描结果放在 key_value中

if(key_value!=NotKeyValue)//若扫描结果 有按键

{

KeyValue=key_value;//存储按键值

KeyDownFlag=TRUE;//按键按下标志位 置位

KeyReadyFlag=TRUE;//按键准备(响应)标志位 置位

}

else KeyDownFlag=FALSE;//若扫描结果 无按键,则 清 按键按下标志位

if(KeyReadyFlag && !KeyDownFlag)//若按键准备就绪,且无按键按下,则表示已松手情况

{

switch(KeyValue)//选择对应按键处理

{

case KeyStartValue://开始键 处理

TR0=1;//开启 时钟定时器

ClockStartFlag=TRUE;//置 时钟开始标志位

break;//开始键处理结束

case KeyStopValue://停止键 处理

TR0=0;//关闭时钟定时器

ClockStartFlag=FALSE;//清 时钟开始标志位

break;//停止键处理结束

case KeyGoOnValue://继续键 处理

TR0=1;//开启时钟定时器

ClockStartFlag=TRUE;//置 时钟开始标志位

break;//继续键处理结束

case KeyClearValue://清零键 处理

Sec=0;//清 秒

Min=0;//清 分

ClearFlag=TRUE;//置 清零标志位

break;//清零键处理结束

default:break;//其他键处理,无 *** 作

}

KeyValue=0;//清 按键值

KeyReadyFlag=FALSE;//清 按键准备(就绪)标志位

}

}

float Pow_Self(float x,uint y)//自编简易 x 的 y 次方函数,y只能是 非负整数

{

float sum;

if(x==0 && y==0) return;//0 的 0 次方无意义

else if(x==0) sum=0;//可有可无,y!=0的情况已经包含x=0,不加不影响结果,但影响运算速度

else if(y==0) sum=1;//除上述情况外,任何数的 0 次方均为 1

else if(y==1) sum=x;//任何数的 1 次方 均为 本身

else if(y>1) sum=Pow_Self(x,--y)x;//递归调用,降幂

return sum;//返回计算结果

}

void Display(uint dis_num)//显示函数,显示内容为 无符号整型数据 dis_num

{

static uchar dis_loca;//定义静态变量 显示位置

dis_loca=++dis_loca%SEG_Num;//先对 显示位置 加1,后对变量范围进行限制 0~(SEG_Num-1)

SEG_AllOff;//关闭所有数码管显示(位驱动)

SEG_Data=SEG_B_List[(dis_num/(uint)(Pow_Self(10,dis_loca)))%10];//将显示内容(dis_num) 本次需显示的位(dis_loca)上的数值转成代码,并送到数据端口

if(dis_loca==2) SEG_Data &=0x7f;//显示 小数点,用于区分 Min 跟 Sec

SEG_En|=1<<(SEG_Num-1-dis_loca);//开启本次需要显示的位驱动(高驱动)

}

void ClockDisplay()//时钟显示函数

{

if(DisplayFlag)//若 显示标志位 为 真

{

Display(Min100+Sec);//调用 显示函数,显示内容为:高2位显示 分Min,低2位显示 秒Sec

DisplayFlag=FALSE;//清 显示标志

}

}

void main()//主函数

{

TimerInit();//调用 定时器初始化函数

while(1)//循环系统

{

KeyResp();//调用 按键响应函数

TimesUpdata();//调用 时间更新函数

ClockDisplay();//调用 时钟显示函数

}

}

你的电路有点问题,稍微修改了一下,不过仿真无所谓了。

电路

代码参考如下:

#include<reg51h>

#define SEG P0

#define BIT P2

#define KEYS P1

unsigned char disBuf[2];

unsigned char segCode[]=

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

void Delay(unsigned int t)

{

while(t--);

}

void WriteLED()

{

  static unsigned char currentBit;

SEG=0xFF;

BIT=1<<currentBit;

SEG=segCode[disBuf[currentBit]];

currentBit=++currentBit%2;

}

unsigned char ScanKeysboard()

{

unsigned char tk,k;

KEYS=0x0F;

tk=KEYS;

if(tk==0x0F) return 0;

switch(tk)

{

  case 0x0E: k=1;break;

case 0x0D: k=2;break;

case 0x0B: k=3;break;

case 0x07: k=4;break;

}

KEYS=0xF0;

tk=KEYS;

switch(tk)

{

  case 0xE0: k+=0;break;

case 0xD0: k+=4;break;

case 0xB0: k+=8;break;

case 0x70: k+=12;break;

default: k=0;break;

}

return k;

}

void main()

{

  unsigned char newKeys,oldKeys;

disBuf[0]=disBuf[1]=16;

while(1)

{

newKeys=ScanKeysboard();

  if(newKeys)

{

newKeys--;

  if(newKeys^oldKeys)oldKeys=newKeys;

else

{

  disBuf[0]=oldKeys/10;

disBuf[1]=oldKeys%10;

}

}

WriteLED();

Delay(500);

}

}

希望能满足你的需要!!!!

以上就是关于怎样给电路板上的芯片写入程序全部的内容,包括:怎样给电路板上的芯片写入程序、求SCT89C52秒表的c语言程序 电路如图,4位数码管中间点一直亮 左边分 右边秒11.0592晶振527205883@qq.com、c51单片机 程序编写 电路图已给出 请指导一下这道题该怎么编 急急急!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10078355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存