|
|
|
|
from UI import *
|
|
|
|
|
# import tkinter as tk
|
|
|
|
|
# from Instruction4 import SimMem
|
|
|
|
|
from tkinter import messagebox
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ClockStep:
|
|
|
|
|
def __init__(self):# 绘制控制器背景板
|
|
|
|
|
round_rectangle(74, 434, 533, 642, r=25, fill=BACK, width=0)
|
|
|
|
|
round_rectangle(97, 525, 276, 627, r=25, fill=BLACK, width=0)
|
|
|
|
|
self.dx2, self.dy2, self.dw2, self.dh2 = 95, 455, 200, 40# 时钟数字间隔
|
|
|
|
|
self.R, self.x0, self.y0, self.dx = 15, 113, 473, 35#时钟大小
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def clo_mark(self, cv:Canvas):# 依据ClockStep[]的值显示时钟元素
|
|
|
|
|
for i in range(6):#遍历六个时钟刻,绘制各个时钟
|
|
|
|
|
cv.create_oval(i * self.dx + self.x0 - self.R, self.y0 - self.R, i * self.dx + self.x0 + self.R,
|
|
|
|
|
self.y0 + self.R, width=1)#绘制时钟圆圈
|
|
|
|
|
if cpu.clo[i] == True:# 如果存储结构中clo[i]为1,则该时钟高亮显示
|
|
|
|
|
cv.create_oval(self.x0 - self.R + self.dx * i, self.y0 - self.R,
|
|
|
|
|
self.x0 + self.R + self.dx * i, self.y0 + self.R, width=1, fill=RED)
|
|
|
|
|
else:# 如果存储结构中clo[i]为1,则该时钟正常显示
|
|
|
|
|
cv.create_oval(self.x0 - self.R + self.dx * i, self.y0 - self.R,
|
|
|
|
|
self.x0 + self.R + self.dx * i, self.y0 + self.R,
|
|
|
|
|
width=1, fill=WHITE)
|
|
|
|
|
cv.create_text(self.dx2 + 12, self.dy2 + 3, text='1 2 3 4 5 6', font=('微软雅黑', 18), anchor=NW)# 重新绘制各时钟编号
|
|
|
|
|
cv.update()#更新画布
|
|
|
|
|
|
|
|
|
|
# 实现仿真控制器的各个屏幕元素,同时依据ClockStep[]的值显示节拍元素
|
|
|
|
|
def show(self, cv: Canvas, root):
|
|
|
|
|
# 标记控制器各个部件名称
|
|
|
|
|
cv.create_text(95, 434, text='Clock', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
|
|
|
|
|
cv.create_text(342, 434, text='PC', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
|
|
|
|
|
cv.create_text(104, 500, text='SigCtrl', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
|
|
|
|
|
cv.create_text(342, 540, text='IR', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
|
|
|
|
|
# 根据当前控制器存储的值显示PC值
|
|
|
|
|
PC = tk.Label(root, text=cpu.PC(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)
|
|
|
|
|
PC.place(x=335, y=455, height=30, width=150)
|
|
|
|
|
# 根据当前控制器存储的值显示IR值
|
|
|
|
|
IR = tk.Label(root, text=cpu.IR(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)
|
|
|
|
|
IR.place(x=335, y=565, height=30, width=150)
|
|
|
|
|
# 绘制Clock背景板
|
|
|
|
|
bx2, by2, bw2, bh2 = 95, 455, 200, 40
|
|
|
|
|
round_rectangle(bx2, by2, bx2 + 215, by2 + 35, r=20, fill=WHITE, width=0)
|
|
|
|
|
# 绘制时钟名称
|
|
|
|
|
cv.create_text(bx2 + 12, by2 + 3, text='1 2 3 4 5 6', font=('微软雅黑', 18), anchor=NW, )
|
|
|
|
|
R = 15
|
|
|
|
|
x0 = 113
|
|
|
|
|
y0 = 473
|
|
|
|
|
dx = 35
|
|
|
|
|
# 绘制各个时钟
|
|
|
|
|
for i in range(6):
|
|
|
|
|
cv.create_oval(i * dx + x0 - R, y0 - R, i * dx + x0 + R, y0 + R, width=1)
|
|
|
|
|
self.clo_mark(cv)
|
|
|
|
|
# 更新画布
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
# 实现仿真控制器的各个屏幕元素,同时依据ClockStep[]的值显示节拍元素
|
|
|
|
|
def init(self, cv:Canvas, root):
|
|
|
|
|
cv.create_text(95, 434, text='Clock', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记PC名称
|
|
|
|
|
cv.create_text(342, 434, text='PC', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记PC名称
|
|
|
|
|
cv.create_text(104, 500, text='SigCtrl', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记sig_ctrl名称
|
|
|
|
|
cv.create_text(342, 540, text='IR', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)# 标记IR名称
|
|
|
|
|
PC = tk.Label(root, text=cpu.PC(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)# 根据cpu存储的值显示PC值
|
|
|
|
|
PC.place(x=335, y=455, height=30, width=150)#放置PC值
|
|
|
|
|
IR = tk.Label(root, text=cpu.IR(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)# 根据cpu存储的值显示IR值
|
|
|
|
|
IR.place(x=335, y=565, height=30, width=150)#放置IR值
|
|
|
|
|
bx2, by2, bw2, bh2 = 95, 455, 200, 40# Clock背景板大小
|
|
|
|
|
round_rectangle(bx2, by2, bx2+215, by2+35, r=20, fill=WHITE, width=0)# 绘制Clock背景板
|
|
|
|
|
self.clo_mark(cv)#绘制六个时钟
|
|
|
|
|
cv.update()#更新面板
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def jp(self, cv:Canvas, flag, num):
|
|
|
|
|
if flag:
|
|
|
|
|
cv.create_oval(self.x0 - self.R + self.dx * (num - 1), self.y0 - self.R, self.x0 + self.R + self.dx * (num - 1), self.y0 + self.R, width=1, fill=RED)
|
|
|
|
|
else:
|
|
|
|
|
cv.create_oval(self.x0 - self.R + self.dx * (num - 1), self.y0 - self.R, self.x0 + self.R + self.dx * (num - 1), self.y0 + self.R,
|
|
|
|
|
width=1, fill=WHITE)
|
|
|
|
|
cv.create_oval(self.x0 - self.R + self.dx * (num - 1), self.y0 - self.R, self.x0 + self.R + self.dx * (num - 1), self.y0 + self.R,
|
|
|
|
|
width=1)
|
|
|
|
|
cv.create_text(self.dx2 + 12, self.dy2 + 3, text='1 2 3 4 5 6', font=('微软雅黑', 18), anchor=NW)
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
cl=ClockStep()
|
|
|
|
|
# cl.clo_mark(cv)
|
|
|
|
|
cl.init(cv,root)
|
|
|
|
|
'''
|
|
|
|
|
def add_program():
|
|
|
|
|
cl.init(cv, root)
|
|
|
|
|
# cl.show(cv, 1)
|
|
|
|
|
# cl.show(cv, 2)
|
|
|
|
|
# cl.show(cv, 3)
|
|
|
|
|
# cl.show(cv, 4)
|
|
|
|
|
# cl.show(cv, 5)
|
|
|
|
|
# cl.show(cv, 6)
|
|
|
|
|
|
|
|
|
|
# si.np()
|
|
|
|
|
# cv.create_line(485,469+4.5,485+120+12,469+4.5,width=9,fill=RED,arrow=LAST)
|
|
|
|
|
# cv.create_rectangle(485, 469, 485 + 120, 469 + 9, fill=RED)
|
|
|
|
|
def left1(event):
|
|
|
|
|
print(event.x,event.y)
|
|
|
|
|
cv.bind('<Button-1>', left1)
|
|
|
|
|
'''
|
|
|
|
|
mainloop()
|